【问题标题】:Display form content on same template django在同一模板django上显示表单内容
【发布时间】:2018-10-11 11:02:07
【问题描述】:

所以我正在使用 django,我有一个简单的表单,其中包含一个名为“sujet”的文本字段,这是 form.py 代码:

from django import forms

class ContactForm(forms.Form):
    sujet = forms.CharField(max_length=100,
        widget=forms.TextInput(
            attrs={
                'id': 'id_sujet', 
                'style': 'border-color: blue;',
                'placeholder': 'Write your name here'
            }
        )
        )

用户可以填写表单的模板“contact.html”如下:

<form id="myForm" action="{% url 'contact' %}" method="post">
    {{ form.sujet }}
    <input type="submit" value="Submit" />
</form>

<div id="response">
    Sujet : <span id="sujeet"></span>
    {{ sujet }}
</div>

在我的“views.py”中,我希望我的联系人函数将变量“sujet”渲染到模板中,以便在填写并提交表单后将其显示在“contact.html”上(稍后会详细说明显示与 sujet 相关的数据库查询的结果,而不是变量本身,但我仍在努力),这是视图函数的代码:

def contact(request):
    form = ContactForm(request.POST or None)
    if form.is_valid(): 
        sujet = form.cleaned_data['sujet']
        envoi = True
        return redirect(request.META['HTTP_REFERER'], {'sujet':sujet})
    else:
        return render(request, 'voirkpi/contact.html', locals())

这是我的“urls.py”的代码:

from django.urls import path
from django.conf.urls import url
from . import views

urlpatterns = [
    path('accueil', views.ligneerabstat),
    path('spark', views.kpitest),
    path('testchart', views.testchart),
    path('contact', views.contact, name='contact'),
    #path('test', views.test, name='test'),
    url('test', views.test, name='test')
]

我的问题是,单击提交后 sujet 是空的并且没有显示任何内容,我确实使用简单的 javascript 完成了这项工作,但这不是我想要的,因为我稍后说它的预期用途是查询数据库并根据填写的“sujet”在该范围内返回查询结果。 任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 在有效的情况下,您正在执行redirect...您的意思是改为执行render 吗?第二个参数也是permanent,但看起来你正在传递上下文
  • 如果它有效,我想做的是将“sujet”发送到同一个模板,这就是为什么我将它重定向到提交表单的同一个模板,如果有另一种方式要做到这一点,请向我推荐。

标签: django forms django-views


【解决方案1】:

感谢您的帮助。你是对的 Resley Rodrigues,我通过在“views.py”中更改我的联系功能解决了我的问题,如下所示:

def contact(request):
    form = ContactForm(request.POST or None)
    if form.is_valid(): 
        sujet = form.cleaned_data['sujet']
        envoi = True
        form = ContactForm()
        return render(request,'voirkpi/contact.html',locals(), {'sujet' : sujet})
    else:
        return render(request, 'voirkpi/contact.html', locals())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2022-11-15
    • 2016-12-04
    • 2016-10-25
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多