2017-02-23 4 views
-4

Ich fing an, Django 1.10 zu studieren, aber es verwendet Beispiele, die auf 1.6 gemacht wurden. Deshalb habe ich Probleme mit der Syntax in der neuen Version.Was ist die richtige Syntax für Argumente in Django 1.10?

Dies ist meine Funktion:

def article(request, article_id=1): 
    comment_form = CommentForm 
    @csrf_protect 
    args = {} 
    args['article'] = Article.objects.get(id=article_id) 
    args['comments'] = Comments.objects.filter(comments_artile_id=article_id) 
    args['form'] = comment_form 
return render (request, 'articles.html', args) 

Und mein Traceback:

File "/home/goofy/djangoenv/bin/firstapp/article/views.py", line 30 

args = {}  
    ^
SyntaxError: invalid syntax 

Bitte zeigen Sie mir, was die richtige Syntax ist oder wo ich die Antwort nicht finden, weil ich es nicht finden kann Erklärungen in den Django Docs.

+1

Versuchen Sie, '@ csrf_protect' über die Funktion zu setzen. – flowfree

+0

Sie haben Recht, es war ein Fehler. Danke –

+1

@AlexeyG Willkommen zu StackOverflow! Wenn Ihr Problem gelöst wurde, wählen Sie bitte eine Antwort aus, um sie als akzeptiert zu markieren, und alle, die Sie als hilfreich empfanden. Dies hilft Menschen, die später wissen, welche Antworten am hilfreichsten sind, und belohnt auch diejenigen, die sich sehr bemüht haben, Ihnen zu helfen. –

Antwort

0

CSRF-Schutz ist standardmäßig aktiviert, und wenn Sie den Dekorator verwenden möchten, müssen Sie ihn vor die Methode wie documentation say setzen.

Ihr CommentForm ist ein Objekt in Ihrem forms.py (nehme ich an) müssen Sie ihn wie die CommentForm()

@csrf_protect 
def article(request, article_id=1): 
    comment_form = CommentForm() 
    args = {} 
    args['article'] = Article.objects.get(id=article_id) 
    args['comments'] = Comments.objects.filter(comments_artile_id=article_id) 
    args['form'] = comment_form 
    return render (request, 'articles.html', args) 

nennen Aber Sie können es einfacher machen, Django ein dict mit dem zugehörigen Namen Beispiel erstellen: {{ article }} in der template.html und der Name des Objekts/Variable in Ihrem wiews.py a (wer ist Comments.objects.filter(comments_artile_id=article_id)).

@csrf_protect 
def article(request, article_id=1): 
    form = CommentForm() 
    a = Article.objects.get(id=article_id) 
    c = Comments.objects.filter(comments_artile_id=article_id) 
    return render (request, 'articles.html', { 
       'article': a, 
       'comments': c, 
       'comment_form': form}) 
1

@csrf_protect ist ein python decorator. Setzen Sie es oberhalb der Methodendefinition, um zu arbeiten. Außerdem muss die Zeile return wie der Rest des Methodenrumpfs eingerückt werden.

@csrf_protect 
def article(request, article_id=1): 
    comment_form = CommentForm() 
    args = {} 
    args['article'] = Article.objects.get(id=article_id) 
    args['comments'] = Comments.objects.filter(comments_artile_id=article_id) 
    args['form'] = comment_form 
    return render (request, 'articles.html', args) 
Verwandte Themen