Разница между template_name и template_name_field?
class ArticleDetailView(DetailView):
template_name = None
template_name_field = None
1)Почему значение по умолчанию поля template_name_field равно None?
2)имя_шаблона vs имя_поля_шаблона
- Почему
template_name_field
значение по умолчаниюNone
?
В template_name_field=…
[Django-doc] указывается имя атрибута объекта, который нужно искать при определении шаблона. В случае, если это None
, Django не будет искать такой атрибут. Однако вам не нужно указывать template_name_field=None
: это уже происходит из-за наследования, поэтому строка template_name_field = None
не является необходимой.
template_name_field
значение по умолчанию будет'article_detail.html'
Нет, вы можете использовать template_name=…
[Django-doc] для указания имени шаблона. В template_name_field
указывается имя атрибута объекта, задающего имя шаблона. Другими словами, у вас может быть модель:
class Article(models.Model):
template_to_render = models.CharField(max_length=128)
Если у вас есть, например, поле, содержащее name шаблона для рендеринга, то вы можете установить template_name_field='template_to_render'
. Django будет искать этот атрибут для данного объекта, и в случае, если такой атрибут существует, использовать его в качестве имени шаблона для рендеринга.
In case both template_name
and template_name_field
are None
, Django will make a final fallback and look for the name of the model (here likely Article
), and will try to render a template named app_name/modelnamesuffix.html
with app_name
the name of the app where you defined the model, modelname
the name of the model in lowercase (so here article
), and suffix
the value for the template_name_suffix=…
attribute [Django-doc], which is by default '_detail'
, so it will look for a template named app_name/article_detail.html
with app_name
the name of the app where you defined the Article
model.