在同一模板django上显示表单内容

时间:2018-05-01 11:48:00

标签: django forms django-views

所以我正在研究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”填充的查询结果。 非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分: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())