views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView
from .models import Journal
from django.urls import reverse
class CreateJournal(LoginRequiredMixin, CreateView):
model = Journal
template_name = 'journals/journal_list.html'
fields = ('journal_name',)
def get_success_url(self):
return reverse('home')
def form_valid(self, form):
form.instance.journal_user = self.request.user
return super(CreateJournal, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(CreateJournal, self).get_context_data(**kwargs)
context['Journals'] = Journal.objects.filter(journal_user=self.request.user)
return context
urls.py
urlpatterns = [
path('', CreateJournal.as_view(), name='journals'),
path('<slug:slug>', JournalEntriesList.as_view(), name='to-journal-entries'),
]
如您所见,我这里没有提到特定的表单,这是因为我没有表单。 CreateView自动创建一个。如您所见,该视图(现在执行两项工作,帮助用户创建一个对象并同时显示所有对象)现在呈现为“ to-journals / journal_list.html”。
我想在“主页”页面或任何其他页面上显示相同的内容(“视图”和“表单”)。
我当前的尝试如下:
journal_tags.py
register = template.Library()
@register.inclusion_tag('template_tags/journal_list.html', takes_context=True)
def get_journals(context):
journals = Journal.objects.filter(journal_user=context['request'].user)
return {'journals': journals}
这成功地将所有现有日记呈现到我想要的任何页面上。现在,我还如何呈现CreateView为我创建的表单。
我尝试的一种方法是将for参数添加到函数中,如下所示:
journal_tags.py
@register.inclusion_tag('template_tags/journal_list.html', takes_context=True)
def get_journals(context):
journals = Journal.objects.filter(journal_user=context['request'].user)
return {
'journals': journals,
'form': CreateJournal,
}
这不起作用,因为CreateJournal是视图而不是表单。 我的问题是如何呈现class CreateJournal(LoginRequiredMixin, CreateView)
创建的表单?
感谢您抽出宝贵的时间对此进行研究。我非常感谢社区的帮助!祝你有美好的一天!
答案 0 :(得分:0)
journal_tags.py
register = template.Library()
@register.inclusion_tag('template_tags/journal_list.html', takes_context=True)
def get_journals(context, self):
journals = to_journal.objects.filter(journal_user=context['request'].user)
return {
'journals': journals,
'form': JournalForm
}
JournalForm与在 models.py
中创建的ModelForm相同class JournalForm(ModelForm):
class Meta:
model = to_journal
fields = ['journal_name']