我已经成功设置了一个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)
的视图类。我在网上找不到任何可以帮助我弄清楚的资源。如何实现呢?我希望我的解释是天才的。预先感谢。
很抱歉,不清楚。这里有更深入更清晰的解释。谢谢。
当前,我的视图class CreateToJournal(LoginRequiredMixin, CreateView)
在http://127.0.0.1:8000/journals/处呈现,如下所示:
在这里输入名称,然后按添加。重新加载页面并将新日记添加到列表中。
我想在http://127.0.0.1:8000/上实现相同的目标。我认为实现此目标的最佳方法是使用templatetag。下面是我当前结果的图像。现在,我可以拉出主页上的所有日记,但是唯一未显示的是日记的输入字段。
最终,我希望将来有一些表格出现在主页上。我认为templatetags是实现这一目标的一种良好且可持续的方式。
我现在将实际视图添加到 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
}
输出不是实际的形式,而是对象的类型。