加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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"
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读