2011-10-30 11 views

उत्तर

9

आप TinyMCE के माध्यम से Django-TinyMCE का उपयोग कर सकते हैं:

http://code.google.com/p/django-tinymce/

आप हर एक फ़ील्ड या व्यवस्थापक में charfield पर TinyMCE उपयोग या तो, या तो आप सिर्फ विशेष क्षेत्रों के लिए जोड़ सकते हैं कर सकते हैं।

पूर्व के लिए, formfield_overides व्यवस्थापक मॉडल सेटिंग्स का उपयोग कर tinymce का उपयोग करने के लिए प्रत्येक CharField या TextField कोसेट करें। तो अपने admin.py में:

formfield_overrides = { 
    models.TextField: {'widget': TinyMCE(attrs={'cols': 80, 'rows': 30})}, 
} 

ओमकारा के लिए आप क्षेत्र आप TinyMCE पर उपयोग करना चाहते हैं के लिए विजेट बदल जाते हैं। अपने forms.py में तो:

class BlogForm(ModelForm): 
    body = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) 

और उसके बाद (admin.py में) इस फार्म का उपयोग करने के लिए व्यवस्थापक बता:

from models import Blog 
from forms import BlogForm 

class BlogAdmin(ModelAdmin): 
    form = BlogForm() 
+0

मुझे यह नेट पर मिला: https://github.com/pydanny/django-wysiwyg। क्या यह अच्छा है? – Adnan

+0

मैंने इसका उपयोग नहीं किया है, लेकिन मुझे यकीन है कि यह नौकरी भी करता है। –

+0

क्या मैं एक form.py बना देता हूं क्योंकि मेरे पास वर्तमान में कोई नहीं है? – Adnan

8

आप कुछ सरल कार्य करने की आवश्यकता (NicEdit WYSIWYG उदाहरण के रूप में) :

1) आवश्यक संपादक डाउनलोड करें और इसे अपने प्रोजेक्ट में किसी फ़ोल्डर में सहेजें, मीडिया फ़ोल्डर में कहें;

2) urls.py अगली पंक्तियों में जोड़ने में:

import os 

PROJECT_DIR = os.path.dirname(__file__) 

urlpatterns = patterns('', 
    ..., 
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': PROJECT_DIR + r'/media/'}), 
    ..., 
) 

3) टेम्पलेट्स फ़ोल्डर में फ़ोल्डर 'व्यवस्थापक' बना सकते हैं और Django/योगदान/व्यवस्थापक/टेम्पलेट्स/व्यवस्थापक/आधार से फ़ाइल base.py वहाँ कॉपी .py;

4) फ़ाइल खोलने base.py और इसे उस तरह से संपादित - पहले 9 पंक्तियों सब पर स्पर्श नहीं करते हैं, लेकिन 9 वीं पंक्ति के बाद अगले कोड जोड़ें:

<script type="text/javascript" src="/media/nicedit/nicEdit.js"></script> 
<script type="text/javascript"> 
    bkLib.onDomLoaded(function() { 
     nicEditors.allTextAreas({iconsPath : '/media/nicedit/nicEditorIcons.gif', 
      buttonList : ['fontSize','fontFamily','bold','italic', 
       'underline','strikeThrough','left','center','right','justify', 
       'ol','ul','subscript','superscript','hr','link','unlink','forecolor', 
       'image','upload','xhtml'] 
     }); 
    }); 
</script> 

सब है कि। अब सभी textareas में व्यवस्थापक पैनल में आपके WYSIWYG उपलब्ध होगा।

1

मैंने विटाली पोनोमर द्वारा दिए गए समाधान को लागू करने का प्रयास किया।

मैं NicEdit चुनें, क्योंकि यह सिर्फ दो जावास्क्रिप्ट फ़ाइलें (nicEdit.js और nicEditorIcons.gif) है कि मैं अपने /media/js/ फ़ोल्डर में डाल दिया और मॉडल में मेरे क्षेत्र प्रकार बदलने के लिए (मैं TinyMCE Documentation में देखा कि क्षेत्र बदलने के लिए की आवश्यकता है की आवश्यकता नहीं है थे एक HTMLField प्रकार के लिए और मैं डेटाबेस में कुछ भी नहीं बदलना चाहता था)।

class NewsAdmin(admin.ModelAdmin): 
    list_display = ('title','lead','date') 
    class Media: 
     js = ('/media/js/nicEdit.js', '/media/js/textarea_content.js') 

admin.site.register(News, NewsAdmin) 

फ़ाइल textarea_content.js कि मैं /media/js/ फ़ोल्डर भी कुछ विशिष्ट बटन के साथ एक विशिष्ट पाठ क्षेत्र प्रारंभ करने में प्रयोग किया जाता है में डाल दिया है:

bkLib.onDomLoaded(function() { 
nicEditors.editors.push(
    new nicEditor({iconsPath : '/media/js/nicEditorIcons.gif', 
     buttonList : ['fontSize','fontFamily','bold','italic', 
      'underline','strikeThrough','left','center','right','justify', 
      'ol','ul','subscript','superscript','hr','link','unlink','forecolor'] 
    }).panelInstance(
     document.getElementById('id_content') 
    ) 
); 
}); 

लेकिन यदि आप

मैं मॉडल में डाल सभी टेक्स्टरीज़ के लिए इसका उपयोग करने की योजना बना रहे हैं, आप उपर्युक्त कोड के बजाय bkLib.onDomLoaded(nicEditors.allTextAreas); का उपयोग कर सकते हैं।

अंत में, अनुमतियों के साथ सावधान रहें (जब मैंने उत्पादन वातावरण में पहली बार कोशिश की तो मेरी जावास्क्रिप्ट फ़ाइलें अनुमतियों के कारण न ही उपलब्ध थीं)।