2013-10-03 222 views
1

我的問題不是在模板上顯示django表單域。這很愚蠢,但我只是沒有找到任何解決方案。Django模板窗體渲染

class CommentForm(forms.ModelForm): 

    class Meta: 
     model = Comment 
     fields = ['name', 'email', 'text'] 

    def __init__(self, content_type, id, *args, **kwargs): 
     super(CommentForm, self).__init__(*args, **kwargs) 
     self.content_type = content_type 
     self.id = id 

    def save(self, commit=True): 

     post_type = ContentType.objects.get_for_model(Post) 
     comment_type = ContentType.objects.get_for_model(Comment) 
     comment = super(CommentForm, self).save(commit=False) 

     if self.content_type == 'post': 
      comment.content_type = post_type 
      comment.post = self.id 
     else: 
      parent = Comment.objects.get(id=self.id) 
      comment.content_type = comment_type 
      comment.post = parent.post 

     comment.object_id = self.id 


     if commit: 
      comment.save() 

     return comment 

我的觀點:

def add_comment(request, content_type, id): 

    if request.method == 'POST': 
     data = request.POST.copy() 
     form = CommentForm(content_type, id, data) 
     if form.is_valid(): 
      form.save() 

    return redirect(reverse('index')) 

我add_comment模板:

<form method="post" action="{% url 'add_comment' 'post' post.id %}"> 
    {% csrf_token %} 

    {% if not user.is_authenticated %} 
    {{ form.name.label_tag }} 
    {{ form.name }} 

    {{ form.email.label_tag }} 
    {{ form.email }} 
    {% endif %} 


    {{ form.text.label_tag }} 
    {{ form.text }}<br> 


    <input type="submit" value="Comment" /> 

    </form> 

和我包括像:

<button id="button" type="button">Add Comment</button> 
    <div id="post_comment_form">{% include 'articles/add_comment.html' %}</div> 
</article> <!-- .post.hentry --> 

爲什麼不Django的渲染表單域,儘管顯示的鈕釦?

編輯:

我呈現形式後視圖。

def post(request, slug): 

    post = get_object_or_404(Post, slug=slug) 
    comments = Comment.objects.filter(post=post.id) 


    return render(request, 
        'articles/post.html', 
        {'post': post, 
        'form': CommentForm, 
        'comments': comments, 
        # 'child_comments': child_comments 

        } 
       ) 
+1

你是不是在傳遞上下文中的'form'。這就是你 – karthikr

回答

1

的文檔,你忘了實例的形式,改變這一行:

'form': CommentForm, 

這個

'form': CommentForm(), 
0

在您看來,您並未向模板發送任何上下文變量,因此您的「表單」對象不可用於模板進行處理。

例如,以下return語句將呈現.html並傳遞所有局部變量,但這不一定是最佳選項(您希望模板有多少訪問權限),但很簡單:

from django.shortcuts import render 

... 

return render(request, "template.html", locals()) 

您還可以傳遞字典而不是所有局部變量。下面是render