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 将是:&lt;my_project_url&gt;/pages/,关于页面:&lt;my_project_url&gt;/pages/about 等等。

【讨论】:

刚刚用文件内容编辑了问题 首先谢谢,这很有帮助...但是如果我想要一个默认应用程序,比如我希望我的网站主页成为页面应用程序,所以它是 /about 而不是 /pages/about ... 我查看了文档,但无法真正理解这一点 编辑我的答案以显示替代方法,以避免在网址中使用页面前缀。

以上是关于django 模板标签 url 仅在最后一个空 url 模式时有效的主要内容,如果未能解决你的问题,请参考以下文章

如何替换重新“。”在 Django 模板 url 标签中

Django 是不是有模板标签可以检测 URL 并将其转换为超链接?

django url 模板标签的问题,% url %

Django:URL模板标签中的模型参数

django'url'模板标签错误

Django:URL conf、url 模板标签的最佳实践