2013-06-28 54 views
3

創建自定義的Django模板和使用形式:如何在django中創建模板標籤並使用Form?

這是文件ratings.py使用標籤:

from django import template 
from django.contrib.contenttypes.models import ContentType 
from Ratings.forms import RatingsForm 

register = template.Library() 

class RatingFormNode(template.Node): 
    def __init__(self, content, id, varname): 
     self.content = content.split('.') 
     self.varname = varname 
     self.id = template.Variable(id) 

    def render(self, context): 
     id = self.id.resolve(context) 
     content = ContentType.objects.get(app_label=self.content[0], model=str(self.content[1]).lower()) 
     context[self.varname] = RatingsForm(initial={'content_type': content, 'object_id': id}) 
     return '' 

@register.tag(name='rating') 
def rating(parser, token): 
    """ 
    {% rating appname.Modelname 1 as Newsletter_Form %} 
    """ 
    bits = token.split_contents() 

    if bits[3] != 'as': 
     raise template.TemplateSyntaxError, "third argument to the get_latest tag must be 'as'" 

    return RatingFormNode(bits[1], bits[2], bits[4]) 

,我在tempalte文件中使用這個標籤:

{% rating appname.Modelname id as rating_form %} 
<form action="{% url 'ratings_add' %}" method="POST"> 
    {% csrf_token %} 
    {{ rating_form }} 
    <input type="hidden" name="url" value="{{ post.slug }}" /> 
    <input type="submit" value="Wyślij" /> 
</form> 

這是網址.py:

from django.conf.urls import patterns, url 

urlpatterns = patterns('Ratings.views', 
    url(r'^add/$', 'ratings_add', name='ratings_add'), 
) 

並創建視圖來獲取網址:

# -*- coding: utf-8 -*- 
from django.core.urlresolvers import reverse 
from django.http.response import Http404 
from django.http import HttpResponseRedirect 
from django.shortcuts import redirect 
from Ratings.forms import RatingsForm 


def ratings_add(request): 
    if not request.method == 'POST': 
     return Http404 
    form = RatingsForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect(reverse('post', args=[request.POST.get('url')])) 
    else: 
     request.session['form_data'] = request.POST 
     return redirect(reverse('post', args=[request.POST.get('url')]), form=form) 

我在模板中使用此標記的URL:「/ post/name-this-post /」。 標籤創建模型「Rating」的「RatingForm」的一種形式。當查看你的頁面並使用表單和表單的人員有效時,這是工作(保存表單並重定向到「/ post/name-this-post /」頁面),但是當發生錯誤時,你被重定向但不顯示一個錯誤。我該如何解決?

回答

1

首先,將嘗試包括塊到您的模板文件:

{% for field in form %} 
    <div class="fieldWrapper"> 
     {{ field.errors }} 
     {{ field.label_tag }} {{ field }} 
    </div> 
{% endfor %} 

其次,是在views.pyredirect(reverse('post', args=[request.POST.get('url')]), form=form)存在視圖post?除了存在條目url(...)urlpatternsurls.py對於post查看?如果兩者都存在,則將其添加到問題代碼

+0

1.當我使用標準表格標籤時,包括所有方法(錯誤,標籤等) 2.是,def post存在,但此定義只響應帖子名稱,內容等我想創建一個表單標籤。評級表格在網站上很常見,我不想發表看法。 –

相關問題