Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据库驱动的消息添加到通过Django联系人表单创建的联系人表单中_Django_Django Forms_Django Admin_Django Views_Django Urls - Fatal编程技术网

将数据库驱动的消息添加到通过Django联系人表单创建的联系人表单中

将数据库驱动的消息添加到通过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

朋友们

我正在使用我的Django动力网站,它运行良好

我现在想在表单上方添加一些文本,我不希望硬编码文本,而是允许通过Django管理屏幕配置消息

我试图实现的是这样的目标:

url(r'^contact/', views.FormTextContactFormView.as_view(), name='contact' ),

因此,我创建了以下对象:

型号.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')),
...
视图.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文件,其中包含以下内容(或类似内容):
现在,在您的URL.py中,您可以像这样使用上述CBV:

url(r'^contact/', views.FormTextContactFormView.as_view(), name='contact' ), url(r“^contact/”,views.FormTextContactFormView.as_view(),name='contact'),
在模板中有一个名为
{{form_text}}
的上下文变量

谢谢你,这正是我想要的,一个pythonic解决方案。再次感谢。第一种解决方案也有它的用途。例如,如果django contact使用普通函数视图而不是CBV,则无法扩展它,需要复制整个视图以添加额外的上下文变量。在这种情况下,添加自定义模板标记将是首选的解决方案。