Форма CreateView не является "рендерингом" в теге шаблона - PullRequest
0 голосов
/ 21 октября 2019

Настройка

Я успешно настроил класс 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/ и выглядит так:

enter image description here

Здесь вы вводите имя и нажимаете Добавить. Страница перезагружается, и новый журнал добавляется в список.

Я хочу добиться того же в http://127.0.0.1:8000/. Я думал, что лучший способ добиться этого - использовать тег шаблона. Ниже изображение моего текущего результата. Теперь я могу извлечь все журналы на главной странице, но единственное, что не отображается, - это поле ввода для журнала.

enter image description here

В конечном счете, я хочу, чтобы в будущем на домашней странице было несколько форм. Я думал, что 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
          }

Выходные данные - не фактическая форма, а тип объекта.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...