首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Django模板中使用{% url ...%} vs {{ .}

在Django模板中使用{% url ...%} vs {{ .}
EN

Stack Overflow用户
提问于 2021-10-05 21:13:02
回答 2查看 132关注 0票数 1

我一直在练习Djnago,为此,我建立了一个博客。在构建过程中,在使用以下代码时,我遇到了一个错误:

代码语言:javascript
运行
AI代码解释
复制
<a href="{% url 'blog_post' post.slug %}">
    {{ post.title }}
</a>

在学习和学习其他课程时,类似的事情会很好。但是现在,它将引发这个例外:NoReverseMatch.

不过,如果我使用这段代码,它就会运行得很好:

代码语言:javascript
运行
AI代码解释
复制
<a href="{{ post.slug }}">
    {{ post.title }}
</a>

虽然在不同的项目中工作,第一种方式会很好,但这一次,它没有。

我的问题是为什么?

下面是我的urls、和我的视图中的代码。也许错误就在这里,而不是其他地方。

如果有人能解释为什么会发生这种事,或者我哪里出了问题,我们会非常感激的

urls

代码语言:javascript
运行
AI代码解释
复制
from django.urls import path

from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.blog_index, name='blog_index'),
    path('<slug:post_slug>/', views.blog_post, name='blog_post'),
]

视图

代码语言:javascript
运行
AI代码解释
复制
from django.shortcuts import render
from .models import Post

# Create your views here.
def blog_index(request):
    posts = Post.objects.order_by('- 
    created').filter(published=True)
    data = {
        'posts': posts
    }
    return render(request, 'blog/post_list.html', data)

def blog_post(request, post_slug):
    post = Post.objects.get(slug=post_slug)
    data = {
        'post': post
    }
    return render(request, 'blog/post_detail.html', data)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-05 21:15:01

尝试this.your的问题是,您的urls.py中有一个名称空间,而在href中,您应该添加那个名称空间(‘blog’)。

代码语言:javascript
运行
AI代码解释
复制
<a href="{% url 'blog:blog_post' post.slug %}">
    {{ post.title }}
</a>

代码语言:javascript
运行
AI代码解释
复制
 <a href="{{ post.slug }}">
    {{ post.title }}
</a>

上面的代码之所以有效,是因为您位于主页中,当您在a标记中添加此代码(href=“{ post.slug }”)时,它将只调用当前的url +“/<‘段塞:post_ url.but /’,这是一个有效的url.but,这是一个非常糟糕的option.use --第一个选项。

要了解这一点,请参阅此https://docs.djangoproject.com/en/3.2/topics/http/urls/#url-namespaces

票数 4
EN

Stack Overflow用户

发布于 2021-10-05 22:11:04

在这种情况下,您应该使用:https://docs.djangoproject.com/en/3.2/ref/models/instances/#get-absolute-url,模板中的逻辑越少,应用程序就越好。很难编写包含在模板中的逻辑测试。

您应该向模型中添加一个方法:

代码语言:javascript
运行
AI代码解释
复制
from django.urls import reverse

class Post()
    ...
    def get_absolute_url(self):
        return reverse('blog:blog_post', kwargs={'post_slug' : self.slug})

在反向函数中,需要添加应用程序命名空间。在你的情况下,这是个博客。https://docs.djangoproject.com/en/3.2/topics/http/urls/#introduction

然后在模板中使用:

代码语言:javascript
运行
AI代码解释
复制
{{ post.get_absolute_url }}

来自文件:

这里的逻辑是,如果您更改对象的URL结构,即使是一些小的东西,比如纠正拼写错误,您也不需要跟踪可能创建的URL的每个位置。在get_absolute_url()中指定一次,并让所有其他代码调用一个位置.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69460144

复制
相关文章
Django小技巧07: 在模板中获取当前URL
确保项目配置里的context_processors包含django.template.context_processors.request.
用户1416054
2018/11/29
3.8K0
Django小技巧07: 在模板中获取当前URL
Django 中url补充以及模板继承
Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root"}), 这样在视图函数中,就可
coders
2018/01/04
1.2K0
Django 中url补充以及模板继承
如何使用Python中Django模板?
https://www.mattlayman.com/understand-django/templates-user-interfaces/
程序员小猿
2021/01/19
4K0
如何使用Python中Django模板?
100 - 在Django模板中使用循环
如何在Django模板中使用循环指令,请举例说明 # myfor.py from django.shortcuts import render class MyClass: name = 'Bill' def myFor(request): values = {'values': [{'name':'item1'}, MyClass(), {'name':'Mike'}]} return render(request, 'for.html', values) # urls.py fr
ruochen
2021/06/28
1.4K0
100 - 在Django模板中使用循环
django-模板之URL标签(五)
book/views.py from django.shortcuts import render def index(request): return render(request,"index.html") def news(request): return render(request,"news.html") def sports(request): return render(request,"sports.html") book/urls.py from django
西西嘛呦
2020/08/26
9310
Django 2.1.7 模板 - 动态URL 反向解析
Django 2.1.7 创建应用模板 Django 2.1.7 配置公共静态文件、公共模板路径 Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释 Django 2.1.7 模板继承 Django 2.1.7 模板 - HTML转义 Django 2.1.7 模板 - CSRF 跨站请求伪造 Django 2.1.7 模板 - 图片验证码的实现
Devops海洋的渔夫
2019/07/02
1.3K0
Django 2.1.7 模板 - 动态URL 反向解析
django ListView 获取 url 中的参数及根据参数使用不同的模板
from django.views import generic class IndexView(generic.ListView): template_name = 'lw-index-noslider.html' # 默认加载该模板文件 context_object_name = "articles" # 是数据库搜索出来的结果存放的变量名字,用于模板循环显示 paginate_by = paginate_by # 设置分页中每一页的记录数目 model = A
卓越笔记
2023/02/18
3.4K0
33. Django 2.1.7 模板 - 动态URL 反向解析
在前面的篇章中,设置视图view的url是写死一个路径path的,当url的path发生需要改变的时候,就会需要去重写很多地方。
Devops海洋的渔夫
2022/01/17
5440
33. Django 2.1.7 模板 - 动态URL 反向解析
Django获取URL中的数据
我们将第一种形式称为“URL路径参数”;第二种形式称为“URL关键字形式”。下面讲述如何在Django中获取这两种形式的数据。
zy010101
2021/11/02
5.7K0
Django中的模板相关
1.render_to_string :找到模板,然后将模板编译后渲染成Python的字符串格式。最后再通过 HttpResponse 类包装成一个 HttpResponse 对象返回回去。示例代码如下:
bering
2023/10/16
2170
Django-3 模板使用
在之前的文章中我们了解到模板允许我们在多个地方重用代码段,非常适合动态HTML页面。使用模板将更复杂的HTML返回给浏览器。我们还将看到如何将变量作为上下文传递给模板。接下来开始:
XXXX-user
2019/07/23
9920
Django-3 模板使用
django模板之的html模板中调用对
解决:由于在python3版本上使用pymysql库,没有MySQLdb库,则需要配置;
py3study
2020/01/08
4.5K0
Django-bootstrap3|在Django中快速使用Bootstrap模版
关于如何快速基于Django使用别人写好的模版搭建网站之前已经有详细讲过,一般我们在Django中使用Bootstrap模版都需要经过以下几个步骤
刘早起
2020/06/28
5.9K0
Python 的 Descriptor 在 Django 中的使用
这篇通过Django源码中的cached_property来看下Python中一个很重要的概念——Descriptor(描述器)的使用。想必通过实际代码来看能让人对其用法更有体会。
the5fire
2019/03/01
4.4K0
django url 正则
正则表达式 (或 regexes ) 是通用的文本模式匹配的方法。 Django URLconfs 允许你 使用任意的正则表达式来做强有力的URL映射,不过通常你实际上可能只需要使用很少的一 部分功能。 这里是一些基本的语法。
一朵灼灼华
2022/08/05
5510
Django教程 —— Django模板
这样定义就太麻烦了吧,并且定义字符串是不会出任何效果和错误,如果有一个专门定义前端页面的地方就好了。
忆想不到的晖
2021/09/29
1.6K0
Django教程 —— Django模板
CGAL的编译以及在VS中的使用
CGAL的编译以及在VS中的使用 在被CGAL长久的折磨了两三周 在学习过程中有好几次库都出现了问题 所以打算重新更换一下版本 CGAL可以说是学习这么久以来见过最离谱(ex)的环境配置,期间出了好几次问题,主要各个配置关联性太强了 稍有一步有问题 编译就很容易报错 所以想记录一下配置过程
用户3519280
2023/07/08
6660
点击加载更多

相似问题

在Django模板中使用url

21

在django模板中使用{% url?%}

63

Django -使用slug在模板中添加{% url%}

13

使用Javascript在Django模板中插入url

19

在Django模板中编码URL

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文