Django在每个页面上添加反馈表单
发布时间:2020-12-20 12:29:33 所属栏目:Python 来源:网络整理
导读:我有一个用户反馈的表单视图: urls.py: url( r'^feedback/$','tool.views.Feedback',name='feedback'),url( r'^thanks/$',direct_to_template,{ 'template': 'tool_feedback_thanks.html' },name='feedback_thanks'), forms.py: class FeedbackForm(forms
我有一个用户反馈的表单视图:
urls.py: url( r'^feedback/$','tool.views.Feedback',name='feedback' ),url( r'^thanks/$',direct_to_template,{ 'template': 'tool_feedback_thanks.html' },name='feedback_thanks' ), forms.py: class FeedbackForm(forms.Form): yes_no = forms.ChoiceField( choices=YES_NO_CHOICE,initial=1,widget=forms.RadioSelect(attrs={'class': 'can_reveal_input'}),label="Are you happy with Our service?" ) comments = forms.CharField( widget=forms.Textarea(attrs={ 'class': 'hidden','placeholder': 'Leave us your comments...' }),required=False,label="" ) views.py: def Feedback(request,template_name='tool_feedback.html'): title = u'Leave us some feedback' form = FeedbackForm(request.POST or None) if form.is_valid(): yes_no = form.cleaned_data['yes_no'] comments = form.cleaned_data['comments'] sender = "A Unirac website user" recipients = ['person@example.com'] send_mail(yes_no,comments,sender,recipients) return HttpResponseRedirect( reverse('feedback_thanks') ) return render_to_response(template_name,{ 'title': title,'form': form,},RequestContext(request)) 这是一种享受,但现在客户要求每个页面都包含此表单.我想这个表单可以通过js提交到相应的url,但是在每个页面上包含未绑定表单的最佳方法是什么? 任何帮助将非常感激. 解决方法
我将创建一个上下文处理器,以在每个视图中包含该表单.
编辑: 要让用户访问他/她正在浏览的上一个网址,您只能使用网址. # yourapp/context_processors.py def feedback_form_context_processor(request): return { 'feedback_form': FeedbackForm(),'feedback_form_url': reverse("feed_app:form_process",args=(request.path)) } 这就是urls.py的样子: urlpatterns = patterns('feed_app.views',url(r'^process-feedback-form/(?P<next_url>d+)','form_process',name='form_process'),) 以及表单的视图: def form_process(request,next_url): # Process form,do your stuff here # if its valid redirect to the url return redirect(next_url) 您应该构建模板以获得正确的布局.例如,有一个基本模板: # templates/base.html <html> <body> .. {% block maincontent %} {% endblock %} .. {# The form!!! #} <form action='{{feedback_form_url}}' method='POST'> @csrftoken {{ feedback_form.as_p }} </form> </body> </html> 要创建简单视图,只需使用正确的模板即可. # templates/just_a_random_view.html {% extends base.html %} {% block maincontent %} <h1>Content!</h1> {% endblock %} 最后,将其包含在您的设置中: # settings.py TEMPLATE_CONTEXT_PROCESSORS = ( "django.contrib.auth.context_processors.auth",... "yourapp.context_processors.feedback_form_context_processor" ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |