将数据库驱动的消息添加到通过Django联系人表单创建的联系人表单中
朋友们 我正在使用我的Django动力网站,它运行良好 我现在想在表单上方添加一些文本,我不希望硬编码文本,而是允许通过Django管理屏幕配置消息 我试图实现的是这样的目标: url(r'^contact/', views.FormTextContactFormView.as_view(), name='contact' ), 因此,我创建了以下对象: 型号.py将数据库驱动的消息添加到通过Django联系人表单创建的联系人表单中,django,django-forms,django-admin,django-views,django-urls,Django,Django Forms,Django Admin,Django Views,Django Urls,朋友们 我正在使用我的Django动力网站,它运行良好 我现在想在表单上方添加一些文本,我不希望硬编码文本,而是允许通过Django管理屏幕配置消息 我试图实现的是这样的目标: url(r'^contact/', views.FormTextContactFormView.as_view(), name='contact' ), 因此,我创建了以下对象: 型号.py class ContactForm(models.Model): before_boilerplate = models
class ContactForm(models.Model):
before_boilerplate = models.CharField(max_length = 8000)
after_boilerplate = models.CharField(max_length = 8000)
def contactform(request):
contactform_text = get_object_or_404(ContactForm, pk=1)
return render(request, 'contact_form.html', {'contactform_text': contactform_text})
...
url(r'^contact/', include('contact_form.urls')),
...
视图.py
class ContactForm(models.Model):
before_boilerplate = models.CharField(max_length = 8000)
after_boilerplate = models.CharField(max_length = 8000)
def contactform(request):
contactform_text = get_object_or_404(ContactForm, pk=1)
return render(request, 'contact_form.html', {'contactform_text': contactform_text})
...
url(r'^contact/', include('contact_form.urls')),
...
url.py
class ContactForm(models.Model):
before_boilerplate = models.CharField(max_length = 8000)
after_boilerplate = models.CharField(max_length = 8000)
def contactform(request):
contactform_text = get_object_or_404(ContactForm, pk=1)
return render(request, 'contact_form.html', {'contactform_text': contactform_text})
...
url(r'^contact/', include('contact_form.urls')),
...
联系表单.html
...
<article>
<h3>{{ contactform_text.before_boilerplate }}</3>
</article>
...
。。。
{{contactform_text.before_boilerplate}}
...
当我运行联系人表单时,我看不到通过Django Admin屏幕输入的文本。当我进入shell并运行相同的命令时,我确实看到了预期的文本
我可以看出问题在于,在url.py中,调用绕过了我的视图,但不幸的是,我不知道如何更改它以便使用我的视图
提前感谢。首先,我不太喜欢您的方法:您生成了一个只包含一行(表单文本)的模型(=数据库表)。不必这样做,您可以使用更通用的方法,如django constance()或其他类似的包(),使用这些方法可以定义保存到数据库中并可通过django admin界面编辑的各种全局设置 另外,请不要将您的型号命名为
ContactForm
。你以后肯定会感到困惑。使用类似于ContactFormTextModel
或甚至ContactFormTextKeeper
。但是不要在不是django表单的东西上加上*表单
后缀
在任何情况下,视图的问题在于,通过包含contact_form.url
,您将使用默认的contact_form.views.ContactFormView
(),它不知道要在模板中呈现的额外信息。因此,您必须将contactform\u text=get\u object\u或\u 404(contactform,pk=1)
传递到您的视图中
为了完整起见,我将给您两个解决方案,一个有效但不遵循pythonic标准,另一个有效且遵循pythonic标准
- 第一个:创建一个简单的模板标记,该标记将输出自定义联系人表单文本并在模板中使用:因此,在应用程序中添加一个templatetags/contact_tags.py文件,其中包含以下内容(或类似内容):
在模板中有一个名为
{{form_text}}
的上下文变量 谢谢你,这正是我想要的,一个pythonic解决方案。再次感谢。第一种解决方案也有它的用途。例如,如果django contact使用普通函数视图而不是CBV,则无法扩展它,需要复制整个视图以添加额外的上下文变量。在这种情况下,添加自定义模板标记将是首选的解决方案。