时间:2023-02-08 00:44:01 | 来源:建站知识
时间:2023-02-08 00:44:01 来源:建站知识
# blogs/settings.py ALLOWED_HOSTS = [ '.mydomain.cn', # 匹配.mydomain.cn的所有域名]
修改主机的hosts,以支持域名访问本地服务,且服务运行在80端口run server 0.0.0.0:80测试。127.0.0.1 www.mydomain.cn127.0.0.1 blog.mydomain.cn127.0.0.1 api.mydomain.cn
from django.contrib import adminfrom django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include('blog.urls', namespace='blog')), path('api/', include('api.urls', namespace='api')), path('', include('www.urls', namespace='www')),]
from django.urls import pathfrom .views import index app_name = 'www' urlpatterns = [ path('', index, name='index'),]<!-- apps/www/templates/www/index.html --> <h2>项目主页</h2><h4><a href="{% url 'blog:index' %}">博客</a></h4><h4><a href="{% url 'api:index' %}">接口</a></h4>
访问 http://www.mydomain.cn/from django.urls import pathfrom .views import index, blog_list, blog_detail app_name = 'blog' urlpatterns = [ path('', index, name='index'), path('list/', blog_list, name='list'), path('detail/<str:blog_id>/', blog_detail, name='detail'),]<!-- apps/blog/templates/blog/index.html --> <h2>BLOG主页</h2><a href="{% url 'blog:list' %}">进入BLOG列表</a>
<!-- apps/blog/templates/blog/list.html --> <h4><a href="{% url 'blog:index' %}">返回BLOG主页</a></h4><ul> <li><a href="{% url 'blog:detail' 1 %}">进入BLOG详情1</a></li> <li><a href="{% url 'blog:detail' 2 %}">进入BLOG详情2</a></li></ul>
<!-- apps/blog/templates/blog/detail.html --> <h2>BLOG详情</h2><h4><a href="{% url 'blog:list' %}">返回BLOG列表</a></h4><b>BLOG正文:</b>当前访问的ID:{{ blog_id }}
pip install django-hosts
# blogs/settings.py INSTALLED_APPS = [ ...... 'django_hosts', # pip install django-hosts 安装,添加app(第1步) ......] MIDDLEWARE = [ 'django_hosts.middleware.HostsRequestMiddleware', # django-hosts 必须添加到最前面(第2步) 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django_hosts.middleware.HostsResponseMiddleware', # django-hosts 必须添加到最后面(第3步)]
在主项目下创建hosts.py 文件,创建一个包含默认主机模式的新模块# blogs/settings.py ROOT_HOSTCONF = 'blogs.hosts'
第5步,设置DEFAULT_HOST,没匹配到的就用该模式,django-hosts ROOT_HOSTCONF之后增加,设置默认模式匹配。如果没有其他模式匹配,或者没有为host_url模板标记指定名称,则将使用它。# blogs/settings.py DEFAULT_HOST = 'www'
第6步设置PARENT_HOST显示域部分,如果想在呈现的URL的域部分附加一个默认域名,否则就只有“blog/index/”,而不是“blog.domain.cn/index/”# blogs/settings.py PARENT_HOST = 'mydomain.cn'
# blogs/hosts.py """创建一个包含默认主机模式的新模块的hosts.py文件中。"""from django.conf import settingsfrom django_hosts import patterns, host host_patterns = patterns('', # 配置模式的正则表达式,如果要使用https,在需要的host中增加 scheme='https://' 属性(第7步) host(r'www', settings.ROOT_URLCONF, name='www'), # 域名城-网络品牌门户 域名注册、预订竞价、域名交易、域名经纪、域名资讯、投资交流平台 直接请求主urls中配置的路由 host(r'api', 'api.urls', name='api'), # http://api.mydomain.cn/ host(r'blog', 'blog.urls', name='blog'), # http://blog.mydomain.cn/)
此时刷新 http://blog.mydomain.cn/ 是会报错的<!-- apps/blog/templates/blog/index.html --> {% load hosts %}<h2>BLOG主页</h2>{#<a href="{% url 'blog:list' %}">进入BLOG列表</a>#}<h4><a href="{% host_url 'list' host 'blog' %}">进入BLOG列表(django-hosts)</a></h4>
就不能使用<a href="{% url 'blog:list' %}">进入BLOG列表</a>,这会导致报错。<!-- apps/blog/templates/blog/list.html --> {% load hosts %}<h4><a href="{% host_url 'index' host 'blog' %}">返回BLOG主页</a></h4><ul>{# <li><a href="{% url 'blog:detail' 1 %}">进入BLOG详情1</a></li>#}{# <li><a href="{% url 'blog:detail' 2 %}">进入BLOG详情2</a></li>#} <li><a href="{% host_url 'detail' 1 host 'blog' %}">进入BLOG详情1</a></li> <li><a href="{% host_url 'detail' 2 host 'blog' %}">进入BLOG详情2</a></li></ul>
如果是需要传递参数<li><a href="{% url 'blog:detail' 1 %}">进入BLOG详情1</a></li>,也要做类似的改动<li><a href="{% host_url 'detail' 1 host 'blog' %}">进入BLOG详情1(django-hosts)</a></li><!-- apps/blog/templates/blog/detail.html --> {% load hosts %}<h2>BLOG详情</h2><h4><a href="{% host_url 'list' host 'blog' %}">返回BLOG列表</a></h4><b>BLOG正文:</b>当前访问的ID:{{ blog_id }}
# apps/blog/views.py from django.shortcuts import renderfrom django_hosts.resolvers import reverse def index(request): blog_99_url = reverse('detail', args=(99,), host='blog') return render(request, 'blog/index.html', {'blog_99_url': blog_99_url})
在模板中显示该url<!-- apps/blog/templates/blog/index.html --> <!DOCTYPE html>{% load hosts %}<html lang="en"><head> <meta charset="UTF-8"> <title>BLOG主页</title></head><body><h2>BLOG主页</h2>{#<a href="{% url 'blog:list' %}">进入BLOG列表</a>#}<h4><a href="{% host_url 'list' host 'blog' %}">进入BLOG列表(django-hosts)</a></h4><a href="{{ blog_99_url }}" target="_blank">推荐阅读 {{ blog_99_url }}</a></body></html>
得到blog_99_url的连接为http://blog.mydomain.cn/detail/99/# blog urls apps/blog/urls.py from django.conf import settingsfrom django.conf.urls.static import staticfrom django.urls import pathfrom .views import index, blog_list, blog_detail app_name = 'blog' urlpatterns = [ path('', index, name='index'), path('list/', blog_list, name='list'), path('detail/<str:blog_id>/', blog_detail, name='detail'),] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
当DEBUG模式时,增加media的路径,而不用hosts时,media是配置到项目主 urls.py 中的关键词:配置,方案