2013-06-28 9 views
3

내가 정의 장고 템플릿과 사용 형태를 만듭니다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> 

이 URL을하다 .py :

from django.conf.urls import patterns, url 

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

및보기를 생성하여 URL을 얻으십시오.

# -*- 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 %} 

, redirect(reverse('post', args=[request.POST.get('url')]), form=form)에 대한 views.py에서보기 post 존재인가? 그 외에도 urlpatternsurl(...)urls.pypost보기에 존재합니까? 둘 다 존재하는 경우 질문 코드에 추가하십시오

+0

1. 표준 양식 태그를 사용할 때 모든 방법이 포함됩니다 (오류, 레이블 등). 2. 예, def post가 있지만이 정의는 게시물 이름, 내용 등에만 해당합니다. 나는 form 태그를 만들고 싶다. 평가 양식은 사이트에서 매우 일반적이며보기를 시작하고 싶지 않습니다. –

관련 문제