#django #django-hosts
#django #django-hosts
Вопрос:
Django 2.2.10
django-hosts 4.0
Я успешно установил django_hosts в соответствии с этой документацией .
Теперь я могу успешно получить доступ к таким страницам, как https://blog.mysite.com
Однако URL-адреса на странице разрешены неправильно. Я последовал примеру, приведенному в официальной документации django_hosts.
Вот как выглядит моя настройка:
mysite/urls.py
# imports etc. truncated for brevity
# ...
urlpatterns = [
path('', include(('home.urls', 'home'), namespace='home')),
path('blog/', include('blog.urls', namespace="blog")),
# ...
]
home/urls.py
from django.urls import path
from django.conf.urls import include, url
from .views import HomePageView, AboutView, TermsView, PrivacyView,
sample, register, signin
app_name = 'home'
urlpatterns = [
path('', HomePageView.as_view(), name='index'),
path('about', AboutView.as_view(), name='about'),
path('terms', TermsView.as_view(), name='terms'),
path('privacy', PrivacyView.as_view(), name='privacy'),
path('sample', sample),
path('register', register, name='register'),
path('signin', signin, name='signin'),
]
blog/templates/index.html
<div class="container">
116 <!-- Logo -->
117 <a class="logo" href="{% host_url 'home' host 'www' %}" style="text-decoration: none; font-size: 250%;">
118 <img src="/static/assets/img/logo.png">
119 My Site
120 </a>
121 <!-- End Logo -->
[[ Править ]]
Фактическая демонстрация загружена на github
Комментарии:
1. home — это имя, а не URL-адрес. куда должна идти ссылка href ?
2. Я не понимаю, как вы следовали связанной документации. Практически нет ничего похожего.
3. @Melvyn первая ссылка показывает, как установить и настроить
django_hosts
приложение. Официальная ссылка на документацию показывает, как использоватьhost_url
тег шаблона.4. @EricMartin Я не понимаю вашего комментария. Пожалуйста, уточните
5. В этой документации показано использование
host
вместоpath
для urlpatterns и другой структуры приложения. Что @EricMartin означает, что ваша подпись вызова для include неверна. Ваш первый член кортежа должен быть итерацией шаблонов, а не ссылкой на модуль.
Ответ №1:
ниже, как мне удалось решить проблему
. mysite
.. blog # Blog app
.. __init__.py
.. urls.py
.. home # Home app
.. __init__.py
.. urls.py
.. mysite
.. urls
.. __init__.py
.. blog.py
.. home.py
.. settings.py
.. hosts.py
в mysite/settings.py
[..]
ALLOWED_HOSTS = [
'mysite.com',
'blog.mysite.com',
]
[..]
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware', # django hosts
[..]
'django_hosts.middleware.HostsResponseMiddleware', # django hosts
]
ROOT_URLCONF = 'mysite.urls.home'
# django-hosts
# https://django-hosts.readthedocs.io/en/latest/#settings
ROOT_HOSTCONF = 'mysite.hosts'
DEFAULT_HOST = 'www' # HERE see hosts.py
PARENT_HOST = 'mysite.com'
# HOST_SCHEME = 'http'
# HOST_PORT = 8000
# HOST_SITE_TIMEOUT = 3600
[..]
в mysite/hosts.py
from django.conf import settings
from django_hosts import patterns, host
host_patterns = patterns('',
# mysite.com
host(r'^$', 'settings.ROOT_URLCONF', name='www'), # see 'settings.py'
# blog.mysite.com
host(r'blog', 'mysite.urls.blog', name='blog'),
)
в mysite/urls/home.py
from django.conf import settings
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('home.urls', namespace='home')),
path('admin/', admin.site.urls), # Admin Area
]
[..]
в mysite/urls/blog.py
from django.urls import path, include
urlpatterns = [
path('', include('apps.blog.urls', namespace='blog')),
]
[..]
в blog/templates/index.html
<div class="container">
<!-- Logo -->
<!-- HERE you don't need to specify host 'www' since it defaults to 'www' see settings.py -->
<a class="logo" href="{% url 'home:index' %}" style="text-decoration: none; font-size: 250%;">
<img src="/static/assets/img/logo.png">
My Site
</a>
<!-- End Logo -->
Комментарии:
1. Спасибо за ваш ответ. Я заметил, что у вас необычная структура каталогов: есть
mysite/urls
папка. Это намеренно или ошибка? Кроме того, требуется ли эта необычная структураdjango_hosts
для корректной работы точки доступа при маршрутизации URL-адресов?2. да, это намеренно, а не ошибка, это просто пакет python (
__init__.py
), чтобы сделать приложение модульным, простым в расширении и обслуживании.3.@HomunculusReticulli вы можете взглянуть на исходный код
djangoproject.com
github.com/django/djangoproject.com/tree/master/djangoproject и вы поймете эту идею4. Я загрузил код для демонстрации, который воспроизводит проблему, на github, чтобы вы могли видеть, что я на самом деле делаю. Смотрите здесь: github.com/Pointer2VoidStar/subdomain-demo
5. @HomunculusReticulli теперь проблема должна быть решена (я потратил много времени на свою очень старую машину), и она работает на windows7 win 32, wampserver2.5, python 3.8.7, обратитесь к этому репозиторию: github.com/cizario/subdomain-demo , я знаю, что должен раскошелиться, но …