Как Django view решает, какую HTML-страницу отображать / отображать? - PullRequest
0 голосов
/ 19 февраля 2019

В моем представлении я не упоминаю имя_ шаблона, тогда как django будет определять, какую HTML-страницу отображать во время запроса?

Вот мой views.py:

from django.shortcuts import render


from django.views.generic import ListView, DetailView
from . models import Movie

class MovieList(ListView):
    model = Movie

   # template_name = 'movie_list.html'
class MovieDetail(DetailView):
    model = Movie
    #template_name = 'movie_detail.html'

Как показано в кодетогда я не упомянул имя шаблона: как django узнает местоположение страницы?

, когда я использую URL "http://localhost:8000/movies/", это отображает MovieList.html

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019
from django.shortcuts import render


from django.views.generic import ListView, DetailView
from . models import Movie

class MovieList(ListView):
    model = Movie

   # template_name = 'movie_list.html'
class MovieDetail(DetailView):
    model = Movie
    #template_name = 'movie_detail.html'

Принимая ваш пример -

Пример: если название модели Movie

  • для ListView: movie_list.html

  • для DetailView: movie_detail.html

  • для DeleteView: movie_confirm_delete.html

  • для CreateView & UpdateView: movie_form.html

Как видно, имя модели берется в нижнем регистре и добавляется тип представления после подчеркивания.Вы можете поэкспериментировать с ним, запустив приложение без шаблонов, и тогда оно выдаст ошибку DoesNotExist, сказав, что не может найти movie_list.html, если вы еще не сделали это в папке с шаблонами.Для всех CBV вы увидите название html, которое хочет django.

0 голосов
/ 19 февраля 2019

По умолчанию Django генерирует template_name, используя имя вашей модели и некоторый суффикс / префикс .

Например, для ListView, template_name генерируется в MultipleObjectTemplateResponseMixin объект.В вашем случае:

  • MovieList: movie_list.html
  • MovieDetail: movie_detail.html
...