Я использую Django 1.9.8 и начал обучение, следуя the official tutorial. В официальном учебном пособии подчеркивается необходимость повторного использования и «плавность». Оттуда я последовал за this учебным пособием по авторизации. Хотя мне удалось заставить учебник авторизации работать, одна вещь об этом, которую мне не нравилась (или просто не понимаю), - это то, что файл проекта urls.py
содержит несколько URL-адресов, специфичных для приложения, вместо того, чтобы помещать их вприложения файл и просто включить этот файл в файл проекта urls.py
. Это похоже на то, что подчеркивает официальный учебник. Я понимаю, что у каждого проекта могут быть разные URL-адреса для входа/выхода/регистрации и т. Д. ... в зависимости от API и все равно придется редактировать, но я чувствую, что смена их в одном месте имеет больше смысла и делает вещи более аккуратными.Django url и файловая структура для шаблонов
Название проекта authtest и имя приложения логарифмически
#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. ру)? Может быть, есть причины для аутентификации, но не о чем, если бы я делал другое приложение?
Теперь для моего второго вопроса, который, я полагаю, зависит от ответа на первый вопрос. В руководстве по авторизации размещаются шаблоны 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',
],
},
},
]
пожалуйста, напишите ваш settings.py показывая TEMPLATE_DIRS директивы – nkhumphreys
Это в значительной степени предпочтения. Есть небольшие отличия, но ничего серьезного. О 'TemplateDoesNotExist': имя шаблона должно относиться к любому шаблону' templates', в котором находится шаблон. Если вы переместите его в 'templates/log/base.html', вы должны передать' log/base.html' в 'login'. Каталог 'log' предотвращает конфликты имен между несколькими приложениями, используя шаблон' base.html'. – knbk
@nkhumphreys Спасибо, я обновил сообщение – user1852176