Настройка
Я успешно настроил класс 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 %}
...
Спасибо, что нашли время взглянуть на этовопрос. Любая помощь приветствуется.
Если потребуется дополнительная информация, я с радостью предоставлю.
Edit
Я знаю, что у меня нет ссылки на класс представления, созданный class CreateToJournal(LoginRequiredMixin, CreateView)
в моем шаблонном теге навсе. Я не смог найти в Интернете ни одного ресурса, который бы помог мне разобраться. Как этого добиться? Я надеюсь, что мои объяснения - Celar. Заранее спасибо.
Редактировать 2
Извините за непонятность. Вот немного более подробное объяснение. Спасибо.
В настоящее время мое представление class CreateToJournal(LoginRequiredMixin, CreateView)
отображается на http://127.0.0.1:8000/journals/ и выглядит так:
Здесь вы вводите имя и нажимаете Добавить. Страница перезагружается, и новый журнал добавляется в список.
Я хочу добиться того же в http://127.0.0.1:8000/. Я думал, что лучший способ добиться этого - использовать тег шаблона. Ниже изображение моего текущего результата. Теперь я могу извлечь все журналы на главной странице, но единственное, что не отображается, - это поле ввода для журнала.
В конечном счете, я хочу, чтобы в будущем на домашней странице было несколько форм. Я думал, что templatetags - это хороший и устойчивый способ сделать это.
Edit 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
}
Выходные данные - не фактическая форма, а тип объекта.