Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中创建模板标记并使用表单?_Django_Django Forms_Django Templates - Fatal编程技术网

如何在django中创建模板标记并使用表单?

如何在django中创建模板标记并使用表单?,django,django-forms,django-templates,Django,Django Forms,Django Templates,我创建自定义django模板并使用表单: 这是文件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_

我创建自定义django模板并使用表单:

这是文件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:

# -*- 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/”),但当发生错误时,您会被重定向,但不会显示错误。如何修复此问题?

首先,将尝试将块包含到模板文件中:

{%用于表单%]中的字段
{{field.errors}}
{{field.label_tag}{{{field}}
{%endfor%}

其次,对于
重定向(反向('post',args=[request.post.get('url')),form=form)
,是否在
views.py
处的exist view
post
?除了在
url.py
urlpatterns的
url(…)
条目中存在
post
视图的
urlpatterns
?如果两者都存在,则将其添加到问题代码中

1。当我使用标准表单标签时,所有方法都包括在内(错误、标签等)。是的,def post存在,但是这个定义只响应post名称、内容等。我想构建一个表单标签。评级表在网站上非常常见,我不想提出任何意见。
# -*- 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)
{% for field in form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}