2017-05-18 5 views
0

Ich bin dran, django-ckeditor App zu meinem TextField zu verwenden.Bild laden funktioniert nicht im django-ckeditor?

Ich möchte das Bild vom Computer laden, aber es gibt keine Schaltfläche zum Laden. Auch kann ich URL des Bildes nicht eingeben. Was habe ich falsch gemacht? Wie behebt man dieses Problem? Hier unten können Sie sehen, was ich wollte.

1) Ich füge ckeditor und ckeditor_uploader-INSTALLED_APPS setting.py:

2) Ich betreibe das collectstatic Management-Befehl.

urls.py:

urlpatterns += [ 
    url(r'^upload/', login_required(views.upload), name='ckeditor_upload'), 
    url(r'^browse/', never_cache(login_required(views.browse)), name='ckeditor_browse'), 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

settings.py:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] 
STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, 'static_root') 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root') 
MEDIA_URL = '/media/' 

CKEDITOR_UPLOAD_PATH = "media/uploads/" 
CKEDITOR_JQUERY_URL = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" 
CKEDITOR_IMAGE_BACKEND = 'pillow' 
CKEDITOR_UPLOAD_SLUGIFY_FILENAME = False 
CKEDITOR_RESTRICT_BY_USER = True 
CKEDITOR_BROWSE_SHOW_DIRS = True 

models.py:

class Post(models.Model): 
    content= RichTextUploadingField(_('Description')) 

forms.py:

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = ('content',) 
     widgets = { 
      'content': CKEditorUploadingWidget() 
     } 

views.py:

def post_add(request): 
    data = dict() 
    if request.method == 'POST': 
     post_form = PostForm(request.POST) 
     if post_form.is_valid(): 
      post = post_form.save(commit=False) 
      ***Some code*** 
      post.save() 
      data['form_is_valid'] = True 
      posts = Post.objects.all() 
      context = {'posts ': posts } 
      context.update(csrf(request)) 
      data['html_post'] = render_to_string('project/post_list.html', context) 
     else: 
      data['form_is_valid'] = False 
    else: 
     post_form = PostForm() 
    context = {'post_form': post_form} 
    data['html_post_form'] = render_to_string('project/post_add.html', context, request=request) 
    return JsonResponse(data) 

post_add.html:

{% load widget_tweaks %} 

    <form method="post" action=""> 
     {% csrf_token %} 

     {{ post_form.media }} 

     {% for field in post_form %} 
     {% render_field field class="form-control" %} 
     {% endfor %} 

     <button type="submit">Create</button> 
    </form> 

<script type="text/javascript" src="{% static "ckeditor/ckeditor-init.js" %}"></script> 

<script type="text/javascript" src="{% static "ckeditor/ckeditor/ckeditor.js" %}"></script> 

Antwort

0

Sie verwenden den RichTextField, wechseln auf die RichTextUploadingField in Ihre models.py

+0

Ja lesen sollte, ich es bemerken gestern. Ich ändere 'RichTextField' in' RichTextUploadingField', aber ich habe Probleme mit dem Steal. Ich kann Bild von Comtuper nicht laden, es leitet mich zur Adminseite um. Ich verwende 'RichTextUploadingField' in der Form, die außerhalb des Admins liegt. Auch merke ich, dass es unmöglich ist, Text in Eingaben in Firefox einzugeben, aber in Chrome-Eingaben funktioniert das gut. Hast du irgendwelche Ideen dazu? Überprüfen Sie meine Post erneut. –

+0

Was passiert, wenn Sie {{form.media}} in das Formular verschieben? –

+0

Ich aktualisiere meinen Beitrag überprüfe es bitte. Mein Problem war in URL. Ich habe 'url (r '^ ckeditor /', include ('ckeditor_uploader.urls'))' 'entfernt und geändert. So jetzt kann ich Bild laden, aber ich klaue habe ein Problem. Wenn ich auf "Senden" -Button klicke, passiert nichts. Es muss einen neuen Post nach dem Senden erstellen. Wie nimm Daten und speichere sie? Was denkst du über mein 'views.py'? –

0

Sie verloren diese {{post_form.as_p}} in post_add.html

https://github.com/django-ckeditor/django-ckeditor Sie detil mehr in Verbindung

+0

Es empfiehlt sich, die relevanten Teile der verknüpften Dokumentation hier zu kopieren, um eine vollständige Antwort für die Personen zu liefern, die diese nach dem Verlust der externen Dokumentation lesen. –

Verwandte Themen