Меню Рубрики

Установка django visual studio

Шаг 2. Создание приложения Django с представлениями и шаблонами страниц Step 2: Create a Django app with views and page templates

В проекте Visual Studio имеются только компоненты на уровне сайта проекта Django, с помощью которых можно выполнить одно или несколько приложений Django. What you have so far in the Visual Studio project are only the site-level components of a Django project, which can run one or more Django apps. Следующий шаг — создание первого одностраничного приложения. The next step is to create your first app with a single page.

На этом шаге вы научитесь делать следующее: In this step you now learn how to:

  • Создание одностраничного приложения Django (шаг 2–1). Create a Django app with a single page (step 2-1)
  • Запуск приложения из проекта Django (шаг 2–2). Run the app from the Django project (step 2-2)
  • Преобразование представления с помощью HTML (шаг 2–3). Render a view using HTML (step 2-3)
  • Преобразование представления с помощью шаблона страницы Django (шаг 2–4). Render a view using a Django page template (step 2-4)

Шаг 2-1. Создание приложения со стандартной структурой Step 2-1: Create an app with a default structure

Приложение Django — это отдельный пакет Python, который содержит набор связанных файлов для определенной цели. A Django app is a separate Python package that contains a set of related files for a specific purpose. Проект Django может содержать любое количество приложений. Это отражает тот факт, что веб-узел может обслуживать любое количество отдельных точек входа с одного доменного имени. A Django project can contain any number of apps, which reflects the fact that a web host can serve any number of separate entry points from a single domain name. Например, проект Django для такого домена как contoso.com может содержать одно приложение для www.contoso.com , второе — для support.contoso.com и третье — для docs.contoso.com. For example, a Django project for a domain like contoso.com might contain one app for www.contoso.com , a second app for support.contoso.com, and a third app for docs.contoso.com. В этом случае проект Django обрабатывает параметры и маршрутизацию URL-адресов на уровне сайтов (в файлах urls.py и settings.py), в то время как каждое приложение имеет собственное значение и реакцию на событие через внутреннюю маршрутизацию, представления, модели, статические файлы и административный интерфейс. In this case, the Django project handles site-level URL routing and settings (in its urls.py and settings.py files), while each app has its own distinct styling and behavior through its internal routing, views, models, static files, and administrative interface.

Приложение Django обычно начинается со стандартного набора файлов. A Django app typically begins with a standard set of files. Visual Studio предоставляет шаблоны элемента для запуска приложения Django в проекте Django, а также интегрированную команду меню, которая выполняет ту же функцию. Visual Studio provides item templates to initialize a Django app within a Django project, along with an integrated menu command that serves the same purpose:

Шаблоны. В обозревателе решений щелкните проект правой кнопкой мыши и выберите Добавить > Новый элемент. Templates: In Solution Explorer, right-click the project and select Add > New item. В диалоговом окне Добавить новый элемент выберите шаблон Приложение Django 1.9, укажите имя приложения в поле Имя и нажмите кнопку . In the Add New Item dialog, select the Django 1.9 App template, specify the app name in the Name field, and select OK.

Встроенная команда. В обозревателе решений щелкните проект правой кнопкой мыши и выберите Добавить > Приложение Django. Integrated command: In Solution Explorer, right-click the project and select Add > Django app. Эта команда запрашивает имя и создает приложение Django 1.9. This command prompts you for a name and creates a Django 1.9 app.

Создайте приложение с именем HelloDjangoApp, используя любой из методов. Using either method, create an app with the name «HelloDjangoApp». В результате будет создана папка в проекте с тем же именем, которая содержит элементы, как описано в указанной ниже таблице. The result is a folder in your project with that name that contains items as described in the table that follows.

Элемент Item Описание Description
__init__.py __init__.py Файл, определяющий приложение в качестве пакета. The file that identifies the app as a package.
migrations migrations Папка, в которой Django хранит скрипты, обновляющие базу данных в соответствии с изменениями в моделях. A folder in which Django stores scripts that update the database to align with changes to the models. Затем средства миграции Django применяют необходимые изменения к любой из предыдущих версий базы данных для соответствия текущим моделям. Django’s migration tools then apply the necessary changes to any previous version of the database so that it matches the current models. С помощью миграции вы можете сконцентрироваться на работе с моделями и позволить Django обрабатывать базовую схему базы данных. Using migrations, you keep your focus on your models and let Django handle the underlying database schema. Сведения о миграции см. в шаге 6. Теперь папка просто содержит файл __init__.py (это значит, что папка определяет собственный пакет Python). Migrations are discussed in step 6; for now, the folder simply contains an __init__.py file (indicating that the folder defines its own Python package).
templates templates Папка для шаблонов страницы Django содержит один файл index.html в папке с именем приложения. A folder for Django page templates containing a single file index.html within a folder matching the app name. (В Visual Studio 2017 15.7 и более ранних версий этот файл находится прямо под шаблонами, и в шагах 2–4 вы создаете вложенную папку.) Шаблоны — это блоки HTML-кода, в которые представления могут добавлять сведения для динамического отображения страницы. (In Visual Studio 2017 15.7 and earlier, the file is contained directly under templates and step 2-4 instructs you to create the subfolder.) Templates are blocks of HTML into which views can add information to dynamically render a page. Переменные шаблона страницы, например << content >> в index.html, — это заполнители для динамических значений, как описано далее в этой статье (шаг 2). Page template «variables,» such as << content >> in index.html, are placeholders for dynamic values as explained later in this article (step 2). Обычно приложения Django создают пространство имен для своих шаблонов, помещая их в подпапку, которая соответствует имени приложения. Typically Django apps create a namespace for their templates by placing them in a subfolder that matches the app name.
admin.py admin.py Файл Python, в котором расширяется административный интерфейс приложения (см. шаг 6), используемый для просмотра и изменения данных в базе данных. The Python file in which you extend the app’s administrative interface (see step 6), which is used to seed and edit data in a database. Изначально файл содержит только оператор, from django.contrib import admin . Initially, this file contains only the statement, from django.contrib import admin . По умолчанию Django содержит стандартный административный интерфейс благодаря записям в файле settings.py проекта Django, который можно включить, раскомментировав имеющиеся записи в urls.py. By default, Django includes a standard administrative interface through entries in the Django project’s settings.py file, which you can turn on by uncommenting existing entries in urls.py.
apps.py apps.py Файл Python, который определяет класс конфигурации для приложения (см. после этой таблицы ниже). A Python file that defines a configuration class for the app (see below, after this table).
models.py models.py Модели — это определенные функциями объекты данных, с помощью которых представления взаимодействуют с основной базой данных приложения (см. шаг 6). Models are data objects, identified by functions, through which views interact with the app’s underlying database (see step 6). Django предоставляет уровень подключения к базе данных, поэтому приложениям не нужно обрабатывать эти сведения. Django provides the database connection layer so that apps don’t need to concern themselves with those details. Файл models.py — это стандартное расположение для создания моделей. Изначально он содержит только оператор from django.db import models . The models.py file is a default place in which to create your models, and initially contains only the statement, from django.db import models .
tests.py tests.py Файл Python, содержащий базовую структуру модульных тестов. A Python file that contains the basic structure of unit tests.
views.py views.py Представления — это то, что вы обычно представляете в качестве веб-страниц. Они принимают HTTP-запрос и возвращают HTTP-ответ. Views are what you typically think of as web pages, which take an HTTP request and return an HTTP response. Представления обычно отображаются в виде HTML-кода в веб-браузерах, однако представление не обязательно должно быть видимым (как промежуточная форма). Views typically render as HTML that web browsers know how to display, but a view doesn’t necessarily have to be visible (like an intermediate form). Представление определяется функцией Python, которая отвечает за обработку HTML-кода для отправки в браузер. A view is defined by a Python function whose responsibility is to render the HTML to send to the browser. Файл views.py — это стандартное расположение для создания представлений. Изначально он содержит только оператор from django.shortcuts import render . The views.py file is a default place in which to create views, and initially contains only the statement, from django.shortcuts import render .

При использовании имени HelloDjangoApp файл app.py имеет следующее содержимое: The contents of apps.py appears as follows when using the name «HelloDjangoApp»:

Вопрос. Отличается ли создание приложения Django в Visual Studio от создания приложения в командной строке? Question: Is creating a Django app in Visual Studio any different from creating an app on the command line?

Шаг 2-2. Запуск приложения из проекта Django Step 2-2: Run the app from the Django project

Теперь, если вы снова запустите проект в Visual Studio (используя кнопку панели инструментов или выполнив команды Отладка > Начать отладку), отобразится страница по умолчанию. At this point, if you run the project again in Visual Studio (using the toolbar button or Debug > Start Debugging), you still see the default page. Содержимое приложения не отобразится, так как для этого необходимо определить страницу приложения и добавить приложение в проект Django. No app content appears because you need to define an app-specific page and add the app to the Django project:

В папке HelloDjangoApp измените значение views.py в соответствии с кодом ниже, который определяет представление с именем index: In the HelloDjangoApp folder, modify views.py to match the code below, which defines a view named «index»:

В папке BasicProject (созданной в шаге 1) измените значение urls.py, чтобы оно по крайней мере соответствовало следующему коду (при необходимости можно оставить полезные комментарии): In the BasicProject folder (created in step 1), modify urls.py to at least match the following code (you can retain the instructive comments if you like):

Каждый шаблон URL-адреса описывает представления, в которые Django направляет определенные URL-адреса, связанные с сайтом (это фрагмент после https://www.domain.com/ ). Each URL pattern describes the views to which Django routes specific site-relative URLs (that is, the portion that follows https://www.domain.com/ ). Первая запись в urlPatterns , которая начинается с регулярного выражения ^$ , — это маршрутизация для корня сайта, «/». The first entry in urlPatterns that starts with the regular expression ^$ is the routing for the site root, «/». Вторая запись ^home$ конкретно направляет /home. The second entry, ^home$ specifically routes «/home». К одному представлению можно иметь любое количество маршрутов. You can have any number of routings to the same view.

Повторно запустите проект, чтобы отобразилось сообщение Hello, Django! , Run the project again to see the message Hello, Django! как определено представлением. as defined by the view. По завершении остановите сервер. Stop the server when you’re done.

Фиксация в системе управления версиями Commit to source control

Так как вы внесли изменения в код и успешно их протестировали, пришло время просмотреть и зафиксировать изменения в системе управления версиями. Because you’ve made changes to your code and have tested them successfully, now is a great time to review and commit your changes to source control. В дальнейших шагах этой статьи указано соответствующее время для повторной фиксации изменений в системе управления версиями, после чего необходимо будет вернуться к этому разделу. Later steps in this tutorial remind you of appropriate times to commit to source control again, and refer you back to this section.

Нажмите кнопку изменения в нижней части Visual Studio (выделена кружком ниже), чтобы перейти к Team Explorer. Select the changes button along the bottom of Visual Studio (circled below), which navigates to Team Explorer.

В Team Explorer введите сообщение фиксации, например «Создать исходное приложение Django» и выберите Зафиксировать все. In Team Explorer, enter a commit message like «Create initial Django app» and select Commit All. После завершения фиксации отобразится сообщение Фиксация создана локально. Синхронизируйте, чтобы использовать изменения совместно с сервером. When the commit is complete, you see a message Commit created locally. Sync to share your changes with the server. Если вы хотите отправить изменения в удаленный репозиторий, выберите Синхронизировать, а затем — Отправить в разделе Исходящие фиксации. If you want to push changes to your remote repository, select Sync, then select Push under Outgoing Commits. Кроме того, вы можете накапливать несколько локальных фиксаций перед отправкой в удаленный репозиторий. You can also accumulate multiple local commits before pushing to remote.

Вопрос. Что означает префикс r перед строками маршрутизации? Question: What is the ‘r’ prefix before the routing strings for?

Ответ. Префикс r в строке Python означает raw (без обработки). Это предписывает Python не использовать escape-символы в строке. Answer: The ‘r’ prefix on a string in Python means «raw,» which instructs Python to not escape any characters within the string. Так как в регулярных выражениях используется множество специальных символов, использование префикса r значительно упрощает чтение этих строк по сравнению с тем, если бы они содержали определенное количество escape-символов \. Because regular expressions use many special characters, using the ‘r’ prefix makes those strings much easier to read than if they contained a number of ‘\’ escape characters.

Вопрос. Что означают символы ^ и $ в записях маршрутизации URL-адреса? Question: What do the ^ and $ characters mean in the URL routing entries?

Ответ. В регулярных выражениях, определяющих шаблоны URL-адреса, ^ означает start of line (начало строки), а $ — end of line (конец строки), где URL-адреса аналогичным образом являются относительными для корня сайта (часть за https://www.domain.com/ ). Answer: In the regular expressions that define URL patterns, ^ means «start of line» and $ means «end of line,» where again the URLs are relative to the site root (the part that follows https://www.domain.com/ ). Регулярное выражение ^$ фактически означает blank (пусто) и поэтому соответствует полному URL-адресу https://www.domain.com/ (ничего не добавляется к корню сайта). The regular expression ^$ effectively means «blank» and therefore matches the full URL https://www.domain.com/ (nothing added to the site root). Шаблон ^home$ точно соответствует https://www.domain.com/home/ . The pattern ^home$ matches exactly https://www.domain.com/home/ . (Django не использует косую черту (/) в конце сопоставления шаблона.) (Django doesn’t use the trailing / in pattern matching.)

Если вы не используете в конце регулярного выражения символ $, как в случае с ^home , то шаблон URL-адреса соответствует любому URL-адресу, который начинается с home, например home, homework, homestead и home192837. If you don’t use a trailing $ in a regular expression, as with ^home , then URL pattern matches any URL that begins with «home» such as «home», «homework», «homestead», and «home192837».

Чтобы поэкспериментировать с разными регулярными выражениями, попробуйте воспользоваться интерактивными средствами, например regex101.com в pythex.org. To experiment with different regular expressions, try online tools such as regex101.com at pythex.org.

Шаг 2-3. Преобразование представления с помощью HTML Step 2-3: Render a view using HTML

Функция index в views.py создает только ответы HTTP в простом текстовом формате для страницы. The index function that you have so far in views.py generates nothing more than a plain-text HTTP response for the page. Большинство реальных веб-страниц, разумеется, предоставляют ответы с большим количеством страниц HTML, которые часто содержат фактические данные. Most real-world web pages, of course, respond with rich HTML pages that often incorporate live data. На самом деле основной причиной для определения представления с помощью функции является возможность создать содержимое динамически. Indeed, the primary reason to define a view using a function is so you can generate that content dynamically.

Так как аргумент в HttpResponse — это просто строка, вы можете создать любой необходимый HTML-код в строке. Because the argument to HttpResponse is just a string, you can build up any HTML you like within a string. Вот простой пример. Замените функцию index указанным ниже кодом (сохраняя при этом имеющиеся операторы from ), который создает HTML-ответ с помощью динамического содержимого. Оно обновляется каждый раз при обновлении страницы. As a simple example, replace the index function with the following code (keeping the existing from statements), which generates an HTML response using dynamic content that’s updated every time you refresh the page:

Повторно запустите проект, чтобы отобразилось сообщение Hello, Django! Run the project again to see a message like «Hello Django! в понедельник, 16 апреля, 2018 г. в 16:28:10. on Monday, 16 April, 2018 at 16:28:10″. Обновите страницу, чтобы обновить время, и убедитесь, что содержимое создается при каждом запросе. Refresh the page to update the time and confirm that the content is being generated with each request. По завершении остановите сервер. Stop the server when you’re done.

Чтобы быстро остановить и перезапустить проект, выполните команду меню Отладка > Перезапустить (CTRL+SHIFT+F5) или нажмите кнопку Перезапуск на панели инструментов отладки: A shortcut to stopping and restarting the project is to use the Debug > Restart menu command (Ctrl+Shift+F5) or the Restart button on the debugging toolbar:

Шаг 2-4. Преобразование представления с помощью шаблона страницы Step 2-4: Render a view using a page template

Создание HTML в коде работает нормально для маленьких страниц. Однако по мере усложнения страниц обычно нужно сохранить статические части HTML своей страницы (вместе с ссылками на файлы CSS и JavaScript) в качестве ее шаблонов, в которые вы затем вставите динамическое содержимое, созданное в коде. Generating HTML in code works fine for very small pages, but as pages get more sophisticated you typically want to maintain the static HTML parts of your page (along with references to CSS and JavaScript files) as «page templates» into which you then insert dynamic, code-generated content. В предыдущем разделе только дата и время вызова now.strftime являлись динамическими. Это значит, что остальное содержимое можно поместить в шаблон страницы. In the previous section, only the date and time from the now.strftime call is dynamic, which means all the other content can be placed in a page template.

Шаблон страницы Django — это блок HTML-кода, содержащий любое количество маркеров замены, которые называются переменными. Они разделены << и >> , как и в << content >> . A Django page template is a block of HTML that can contain any number of replacement tokens called «variables» that are delineated by << and >> , as in << content >> . Затем модуль шаблонов Django заменяет переменные динамическим содержимым, предоставленным в коде. Django’s templating module then replaces variables with dynamic content that you provide in code.

В следующих шагах показано использование шаблонов страницы. The following steps demonstrate the use of page templates:

В папке BasicProject, содержащей проект Django, откройте файл settings.py и добавьте имя приложения HelloDjangoApp в список INSTALLED_APPS . Under the BasicProject folder, which contains the Django project, open settings.py file and add the app name, «HelloDjangoApp», to the INSTALLED_APPS list. Добавление приложения в список указывает проекту Django, что в приложении уже есть папка с идентичным именем. Adding the app to the list tells the Django project that there’s a folder of that name containing an app:

Кроме того, в settings.py убедитесь в том, что объект TEMPLATES содержит следующую строку (включена по умолчанию), которая указывает Django, что нужно найти шаблоны в папке templates установленного приложения: Also in settings.py, make sure the TEMPLATES object contains the following line (included by default), which instructs Django to look for templates in an installed app’s templates folder:

В папке HelloDjangoApp откройте файл шаблона страницы templates/HelloDjangoApp/index.html (или templates/index.html в Visual Studio 2017 15.7 и более ранних версий), чтобы увидеть, что в нем находится только одна переменная << content >> : In the HelloDjangoApp folder, open the templates/HelloDjangoApp/index.html page template file (or templates/index.html in VS 2017 15.7 and earlier), to observe that it contains one variable, << content >> :

В папке HelloDjangoApp откройте views.py и замените функцию index приведенным ниже кодом, в котором используется вспомогательная функция django.shortcuts.render . In the HelloDjangoApp folder, open views.py and replace the index function with the following code that uses the django.shortcuts.render helper function. Вспомогательная функция render предоставляет упрощенный интерфейс для работы с шаблонами страницы. The render helper provides a simplified interface for working with page templates. Не забудьте сохранить все имеющиеся операторы from . Be sure to keep all existing from statements.

Первый аргумент в render , как можно увидеть, — это объект запроса, за которым следует относительный путь к файлу шаблона в папке templates приложения. The first argument to render , as you can see, is the request object, followed by the relative path to the template file within the app’s templates folder. Файл шаблона называется в соответствии с поддерживаемым представлением, если это уместно. A template file is named for the view it supports, if appropriate. Третий аргумент в render представляет собой словарь переменных, к которым относится шаблон. The third argument to render is then a dictionary of variables that the template refers to. Вы можете добавить объект в словарь. В этом случае переменная в шаблоне может ссылаться на << object.property >> . You can include objects in the dictionary, in which case a variable in the template can refer to << object.property >> .

Запустите проект и просмотрите выходные данные. Run the project and observe the output. Должно отобразиться идентичное сообщение, что и на шаге 2–2. Оно означает, что шаблон работает. You should see a similar message to that seen in step 2-2, indicating that the template works.

Обратите внимание, что HTML, используемый в свойстве content , отображается только в качестве обычного текста, так как функция render автоматически экранирует этот HTML. Observe, however, that the HTML you used in the content property renders only as plain text because the render function automatically escapes that HTML. Автоматическое экранирование предотвращает случайные уязвимости в отношении атак путем внедрения кода: разработчики часто собирают входные данные с одной страницы и используют их в качестве значения на другой странице с помощью заполнителя шаблона. Automatic escaping prevent accidental vulnerabilities to injection attacks: developers often gather input from one page and use it as a value in another through a template placeholder. Экранирование служит напоминанием о том, что HTML-код рекомендуется хранить в шаблоне страницы, а не в коде. Escaping also serves as a reminder that it’s again best to keep HTML in the page template and out of the code. К счастью, создание дополнительных переменных при необходимости не представляет трудностей. Fortunately, it’s a simple matter to create additional variables where needed. Например, измените index.html с шаблонами в соответствии со следующими исправлениями, в которых добавлен заголовок страницы и сохранено все форматирование в шаблоне страницы: For example, change index.html with templates to match the following markup, which adds a page title and keeps all formatting in the page template:

Затем запишите функцию представления index указанным ниже образом, чтобы предоставить значения для всех переменных в шаблоне страницы. Then write the index view function as follows, to provide values for all the variables in the page template:

Остановите сервер и перезапустите проект. Вы можете заметить, что теперь страница отображается должным образом. Stop the server and restart the project, and observe that the page now renders properly:

Visual Studio 2017 версии 15.7 или более ранних версий. В качестве завершающего этапа переместите шаблоны в подпапку, имя которой совпадает с именем приложения, которое создает пространство имен и позволяет избежать возможных конфликтов с другими приложениями, добавленными в проект. Visual Studio 2017 version 15.7 and earlier: As a final step, move your templates into a subfolder named the same as your app, which creates a namespace and avoids potential conflicts with other apps you might add to the project. (Шаблоны в Visual Studio 2017 15.8+ делают это автоматически.) Другими словами, создайте вложенную папку в templates с именем HelloDjangoApp, переместите файл index.html в эту вложенную папку и измените функцию представления index так, чтобы она ссылалась на новый путь шаблона HelloDjangoApp/index.html. (The templates in VS 2017 15.8+ do this for you automatically.) That is, create a subfolder in templates named HelloDjangoApp, move index.html into that subfolder, and modify the index view function to refer to the template’s new path, HelloDjangoApp/index.html. Затем запустите проект, убедитесь, что страница отображается должным образом и остановите сервер. Then run the project, verify that the page renders properly, and stop the server.

Зафиксируйте изменения в системе управления версиями и обновите удаленный репозиторий при необходимости, как описано в шаге 2–2. Commit your changes to source control and update your remote repository, if desired, as described under step 2-2.

Вопрос. Следует ли хранить шаблоны страницы в отдельном файле? Question: Do page templates have to be in a separate file?

Ответ. Хотя шаблоны обычно хранятся в отдельных HTML-файлах, вы также можете использовать встроенный шаблон. Answer: Although templates are usually maintained in separate HTML files, you can also use an inline template. Чтобы сохранить четкое разделение между исправлением и кодом, рекомендуется использовать отдельный файл. Using a separate file is recommended, however, to maintain a clean separation between markup and code.

Вопрос. Следует ли использовать в шаблонах расширение файлов HTML? Question: Must templates use the .html file extension?

Ответ. Использовать расширение .html для файлов шаблона страницы совсем необязательно, так как вы всегда определяете точный относительный путь к файлу во втором аргументе функции render . Answer: The .html extension for page template files is entirely optional, because you always identify the exact relative path to the file in the second argument to the render function. Однако Visual Studio (и другие редакторы) обычно предоставляет такие функции, как завершение кода или разметка синтаксиса, для файлов HTML, что значительно важнее того, что шаблоны страниц не имеют строгого формата HTML. However, Visual Studio (and other editors) typically give you features like code completion and syntax coloration with .html files, which outweighs the fact that page templates are not strictly HTML.

На самом деле при работе с проектом Django Visual Studio автоматически обнаруживает, если HTML-файл, который вы редактируете, фактически является шаблоном Django, и предоставляет несколько функций с автоматическим завершением. In fact, when you’re working with a Django project, Visual Studio automatically detects when the HTML file you’re editing is actually a Django template, and provides certain auto-complete features. Например, когда вы начинаете вводить комментарий шаблона страницы Django, <# , Visual Studio автоматически предоставляет вам закрывающие символы #>. For example, when you start typing a Django page template comment, <# , Visual Studio automatically gives you the closing #>characters. В командах Закомментировать выделенный фрагмент и Раскомментировать выделенный фрагмент (в меню Изменить > Дополнительно или на панели инструментов) также используются комментарии шаблона, а не HTML. The Comment Selection and Uncomment Selection commands (on the Edit > Advanced menu and on the toolbar) also use template comments instead of HTML comments.

Вопрос. При запуске проекта отображается ошибка, что шаблон не найден. Question: When I run the project, I see an error that the template cannot be found. В чем проблема? What’s wrong?

Ответ. Если отображаются сообщения о том, что не удается найти шаблон, убедитесь в том, что вы добавили приложение в файл settings.py проекта Django в списке INSTALLED_APPS . Answer: If you see errors that the template cannot be found, make sure you added the app to the Django project’s settings.py in the INSTALLED_APPS list. Без этой записи Django не сможет выполнять поиск в папке templates приложения. Without that entry, Django won’t know to look in the app’s templates folder.

Вопрос. Почему организация пространства имен шаблона важна? Question: Why is template namespacing important?

Ответ. Когда платформа Django выполняет поиск шаблона, упомянутого в функции render , она использует первый найденный файл, который соответствует относительному пути. Answer: When Django looks for a template referred to in the render function, it uses whatever file it finds first that matches the relative path. Если у вас есть несколько приложений Django в одном проекте, использующие одну структуру папок для шаблонов, скорее всего, одно приложение будет непреднамеренно использовать шаблон из другого приложения. If you have multiple Django apps in the same project that use the same folder structures for templates, it’s likely that one app will unintentionally use a template from another app. Чтобы избежать подобных ошибок, всегда создавайте вложенную папку в папке templates приложения, которая соответствует имени приложения. Это позволит избежать любого дублирования. To avoid such errors, always create a subfolder under an app’s templates folder that matches the name of the app to avoid any and all duplication.

источник

Читайте также:  Установка гидро блокировки на уаз