如何在一个网址上生成2个以上的观看次数?

时间:2015-04-16 17:04:25

标签: python django

请帮助理解是否可以这样做。 有一个索引页面应该放在联系表格django-contact-form.readthedocs.org

索引中的代码views.py:

def index(request):
    args = {}
    args.update(csrf(request))
    return render_to_response('index.html', args)

contact_form中的代码views.py:

class ContactFormView(FormView):
    form_class = ContactForm
    template_name = 'contact_form/contact_form.html'

    def form_valid(self, form):
        form.save()
        return super(ContactFormView, self).form_valid(form)

    def get_form_kwargs(self):
        kwargs = super(ContactFormView, self).get_form_kwargs()
        kwargs.update({'request': self.request})
        return kwargs

    def get_success_url(self):
        return reverse('contact_form_sent')

Separetly,这很完美。例如,我们有“example.com/”,联系表单适用于“example.com/contact_form” 它可以在“example.com/”上工作吗?

2 个答案:

答案 0 :(得分:0)

如果您希望在所有网页中嵌入表单,通常可以通过context processor添加表单,然后通过action attribute将表单提交操作委托给相应的视图。要让用户保持在他们所在的页面上,您可以添加隐藏的表单元素,例如"下一个"并使用FormView.get_success_url方法重定向回到以前的视图。

默认情况下,表单视图使用保留的表单'变量,因此您可能希望使用不同的变量名来避免冲突。

这是一个开始

<强> urls.py

urlpatterns += urlpatterns('',
    url('^handle_form/$', MyFormView.as_view(), name="handle_form"),
)

<强> views.py

class MyFormView(FormView):
    # other stuff

    def get_success_url(self):
        # get the variable from request.GET.get('next')
        # return HttpResponseRedirect(some_view)

<强> template.html

<form action="{% url "handle_form" %}">
    <input type="hidden" name="next" value="{% url "...current_page..." %}" />
    <!-- other stuff -->
</form>

答案 1 :(得分:0)

是的,您可以使用条件语句优化请求方法类型轻松完成。看看这里 -

在你的view.py中

from django.template import RequestContext, loader

def index(request):
    args = {}
    args.update(csrf(request))
    template = loader.get_template('template.html')
    context = RequestContext(request, {
        'form_class': ContactForm,
        'args':args,
        'success_url': '/',
    })
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            form.save()
    return HttpResponse(template.render(context))