django 模板标签 url 仅在最后一个空 url 模式时有效
Posted
技术标签:
【中文标题】django 模板标签 url 仅在最后一个空 url 模式时有效【英文标题】:django template tag url only work when empty url pattern is last 【发布时间】:2021-07-14 03:22:33 【问题描述】:我正在学习 django,我不太明白这是 django 的行为还是我做错了什么。 所以基本上我尝试使用 django 模板标签来创建一个固定的 html 页眉和页脚以从它扩展 base.html 是这样的
<a href="% url "index" %" style="text-decoration:none;"><h1 style="text-align: center;color: green">Welcome to HireMe</h1></a>
% block title %
% endblock title %
% block content %
% endblock content %
<a href="% url "about" %" style="text-decoration:none;"><h4 style="text-align: left;color: purple;margin-top:256px;">About us</h4></a>
而index.html是这样的
% extends 'base.html' %
% block content %
<body style="background-color: rgb(243,220,245) ">
<div align="center">
<p>Fugiat commodo officia laborum esse magna nisi commodo eu est non sunt in ut adipisicing nulla cupidatat dolor.</p>
<img src="https://media4.giphy.com/media/3pZipqyo1sqHDfJGtz/giphy.gif">
</div>
</body>
% endblock content%
当我在这里使用 url 模板标签 href="% url "index" %" 它应该带我到索引 根据我在 url 模式中命名的页面
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', include('pages.urls'), name='test'),
path('about', include('pages.urls'), name='about'),
path('', include('pages.urls'), name='index'),
]
只要 "" 模式是最后一个,但如果我将这些行更改为这个
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', include('pages.urls'), name='test'),
path('', include('pages.urls'), name='index'),
path('about', include('pages.urls'), name='about'),
]
它带我到 /about 页面,如果我将 href="% url "index" %" 更改为 href="% url "about" %" 它带我到 /aboutabout 页面,那么url 值始终是最后一个模式,否则我做错了什么
pages/url.py 文件
from django.urls import path
from .views import HomePageView, AboutPageView, TestPageView
urlpatterns = [
path('about', AboutPageView.as_view(), name='about'),
path('test', TestPageView.as_view(), name='test'),
path('', HomePageView.as_view(), name='index'),
]
查看文件
from django.shortcuts import render
from django.views.generic import TemplateView
from django.http import HttpResponse
# Create your views here.
class HomePageView(TemplateView):
template_name = 'index.html'
class AboutPageView(TemplateView):
template_name = 'about.html'
class TestPageView(TemplateView):
template_name = 'test.html'
【问题讨论】:
【参考方案1】:错误的来源是您缺少在 Django 中处理 URL 的一些详细信息,有关它的更多详细信息:https://docs.djangoproject.com/en/3.2/topics/http/urls/
您的项目网址应如下所示:
urlpatterns = [
path('admin/', admin.site.urls),
path('pages/', include('pages.urls')),
]
或者:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pages.urls')),
]
如果您不想在您的网址中使用前缀 pages
。
和 pages/urls.py:
from django.urls import path
from .views import HomePageView, AboutPageView, TestPageView
urlpatterns = [
path('', HomePageView.as_view(), name='index'),
path('about', AboutPageView.as_view(), name='about'),
path('test', TestPageView.as_view(), name='test'),
]
主页的 url 将是:<my_project_url>/pages/
,关于页面:<my_project_url>/pages/about
等等。
【讨论】:
刚刚用文件内容编辑了问题 首先谢谢,这很有帮助...但是如果我想要一个默认应用程序,比如我希望我的网站主页成为页面应用程序,所以它是以上是关于django 模板标签 url 仅在最后一个空 url 模式时有效的主要内容,如果未能解决你的问题,请参考以下文章