CreateView表单未在模板标签中“呈现”

时间:2019-10-21 15:04:48

标签: django django-forms django-templates django-views

设置

我已经成功设置了一个CreateView类,该类允许用户创建日记。您只需要输入名称,然后按“添加”按钮即可。

views.py

...
class CreateToJournal(LoginRequiredMixin, CreateView):
    model = to_journal
    template_name = 'to_journals/to_journal_list.html'
    fields = ('journal_name',)

    def get_success_url(self):
        return reverse('to-journals')

    def form_valid(self, form):
        form.instance.journal_user = self.request.user
        return super(CreateToJournal, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(CreateToJournal, self).get_context_data(**kwargs)
        context['to_journals'] = to_journal.objects.filter(journal_user=self.request.user)
        return context
...

to_journal_list.html

...
<form class="" id="myForm" action="" method="post">
   {% csrf_token %}
   {{ form }}
   <button type="submit" id="add-button">Add</button>
</form>
...

这将创建一个新日记本并重新加载页面以反映所做的更改。

我现在正尝试使用模板标记将整个日记创建过程移至“主页”页面。通常,它可以正常工作并在主页上呈现所有用户日记,但是表单呈现存在问题。

问题

新的模板标记不会呈现CreateView创建的表单。带有模板标签的页面上此处未显示输入字段。

我找不到有关表单和模板标签之间关系的任何特定信息(或一般性信息)。

我对模板标记的设置如下:

...

├───pages
│   └───templatetags
│       └───__init__.py
│       └───journal_tags.py

...

├───templates
│   └───template_tags
│       └───journal_list.html
...

页面是“静态”页面的应用。

journal_tags.py

from django import template
from to_journals.models import to_journal

register = template.Library()

@register.inclusion_tag('template_tags/journal_list.html', takes_context=True)
def get_journals(context):
  journals = to_journal.objects.filter(journal_user=context['request'].user)
  return {'journals': journals}

journal_list.html

...
<form class="" id="myForm" action="" method="post">
   {% csrf_token %}
   {{ form }}
   <button type="submit" id="add-button">Add</button>
</form>
...

home.html

...
  {% load journal_tags %}
  {% get_journals %}
...

感谢您抽出宝贵的时间来研究这个问题。任何帮助表示赞赏。

如果需要更多信息,我会很乐意提供。

编辑

我知道我完全没有引用在模板标记中创建的class CreateToJournal(LoginRequiredMixin, CreateView)的视图类。我在网上找不到任何可以帮助我弄清楚的资源。如何实现呢?我希望我的解释是天才的。预先感谢。

编辑2

很抱歉,不清楚。这里有更深入更清晰的解释。谢谢。

当前,我的视图class CreateToJournal(LoginRequiredMixin, CreateView)http://127.0.0.1:8000/journals/处呈现,如下所示:

enter image description here

在这里输入名称,然后按添加。重新加载页面并将新日记添加到列表中。

我想在http://127.0.0.1:8000/上实现相同的目标。我认为实现此目标的最佳方法是使用templatetag。下面是我当前结果的图像。现在,我可以拉出主页上的所有日记,但是唯一未显示的是日记的输入字段。

enter image description here

最终,我希望将来有一些表格出现在主页上。我认为templatetags是实现这一目标的一种良好且可持续的方式。

编辑3

我现在将实际视图添加到 journal_tags.py

from django import template
from to_journals.models import to_journal
from to_journals.views import CreateToJournal

register = template.Library()

@register.inclusion_tag('template_tags/journal_list.html', takes_context=True)
def get_journals(context):
  journals = to_journal.objects.filter(journal_user=context['request'].user)
  return {'journals': journals,
          'form': CreateToJournal(), #new
          }

输出不是实际的形式,而是对象的类型。

enter image description here

0 个答案:

没有答案