Разница между 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.