Разница между template_name и template_name_field?

class ArticleDetailView(DetailView):
    template_name = None
    template_name_field = None

1)Почему значение по умолчанию поля template_name_field равно None?

2)имя_шаблона vs имя_поля_шаблона

  1. Почему template_name_field значение по умолчанию None?

В template_name_field=… [Django-doc] указывается имя атрибута объекта, который нужно искать при определении шаблона. В случае, если это None, Django не будет искать такой атрибут. Однако вам не нужно указывать template_name_field=None: это уже происходит из-за наследования, поэтому строка template_name_field = None не является необходимой.

  1. 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.

Вернуться на верх