Я использую Django 1.9.8 и начал учиться, следуя официальному руководству . В официальном руководстве подчеркивалась возможность повторного использования и «подключаемость». Оттуда я следовал этому руководству по авторизации. Хотя мне удалось заставить работать учебник по авторизации, одна вещь, которая мне не понравилась (или просто не понятна), заключается в том, почему файл urls.py
проекта содержит несколько URL-адресов, специфичных для приложения, а не размещает их в файле urls.py
приложения. файл и просто включить этот файл в файл проекта urls.py
. Кажется, это противоречит тому, что подчеркивает официальный учебник. Я понимаю, что каждый проект может иметь разные URL-адреса для входа/выхода из системы/регистрации и т. д. в зависимости от API, и их все равно придется редактировать, но мне кажется, что изменение их в одном месте имеет больше смысла и делает вещи более аккуратными.
Имя проекта — authtest, а имя приложения — log.
#log/urls.py
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth import views
from log.forms import LoginForm
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('log.urls')),
url(r'^login/$', views.login, {'template_name': 'login.html', 'authentication_form': LoginForm }), #move this to authtest/urls.py
url(r'^logout/$', views.logout, {'next_page': '/login'}), #move this to authtest/urls.py
]
Теперь о файле urls.py
приложения.
#authtest/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.home, name='home'),
]
Это работает на 100%, так что теперь первый вопрос. Есть ли какая-либо причина, по которой мне не следует перемещать конкретные URL-адреса приложения журнала (вход и выход) из файла urls.py проекта (log/urls.py) и помещать их в файл urls.py приложения (authtest/ urls.py)? Возможно, есть причины для отказа от аутентификации, но что, если я делаю другое приложение?
Теперь о моем втором вопросе, который, я полагаю, зависит от ответа на первый вопрос. Учебник по авторизации помещает шаблоны login.html, logout.html и home.html в корневую папку шаблонов проекта. Учебник Django предлагает поместить их в каталог шаблонов приложения, а в этом каталоге — другой каталог с именем, которое называется приложением (для пространства имен). Что мне нужно изменить, если я перенесу файлы шаблонов для конкретного приложения из папки шаблонов проекта в папку шаблонов приложения журнала?
Это текущая файловая структура из руководства по авторизации, которому я следовал.
authtest
|...authtest
|...|...settings.py
|...|...urls.py
|...log
|...|...settings.py
|...|...urls.py
|...|...views.py
|...manage.py
|...templates
|...|...base.html
|...|...home.html
|...|...login.html
|...static
Вот как я предположил, что это должно быть основано на том, как официальный учебник предлагает использовать шаблоны.
authtest
|...authtest
|...|...settings.py
|...|...urls.py
|...log
|...|...urls.py
|...|...views.py
|...|...templates
|...|...|...log #namespace of the log app
|...|...|...|...base.html
|...|...|...|...home.html
|...|...|...|...login.html
|...manage.py
|...templates
|...static
Когда я перемещаю файлы, я получаю следующую ошибку TemplateDoesNotExist at /login/
при посещении http://localhost:8080/login/
. Я предполагаю, что это исключительно файлы urls.py, но я не уверен, что именно мне нужно изменить.
отредактировано для директивы шаблонов settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ["templates"],
#'DIRS': [os.path.join(BASE_DIR, 'templates')], #I also tried this
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
{% extend log/base.html %}
, так как это новый путь 09.08.2016base.html
в каталоге приложения, который напрямую расширяетbase.html
проекта, а затем другие html-файлы в каталоге приложения расширяют локальный файлbase.html
. 09.08.2016