[英]django.urls.exceptions.NoReverseMatch: Reverse for 'home' not found. 'home' is not a valid view function or pattern name
[英]django_hosts - NoReverseMatch: Reverse for 'home' not found. 'home' is not a valid view function or pattern name
Django 2.2.10 django-hosts 4.0
我已經按照本文檔成功安裝了 django_hosts。
我現在可以成功訪問https://blog.mysite.com 之類的頁面
然而,頁面上的URL不正確地解析。 我遵循了django_hosts 官方文檔中顯示的示例。
這是我的設置的樣子:
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'),
]
<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 -->
<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
下面我是如何設法解決這個問題的
. 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 -->
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.