Django url的命名空间 url反向解析
2017-07-15 10:13
1086 查看
用法一:
一个简单的需求: 在博客的主页的右侧列出所有的文章分类,当点击相应的分类的时候,列出这个分类下的所有文章.
此时,就需要用到url反向解析,Django里面的视图函数命名空间技术.
具体代码实现就是在urls.py中声明app_name:
在html中
category函数的实现为:
用法二:
在models数据表类中定义reverse方法:
class Post(models.Model):
#标题
title = models.CharField(max_length=70)
... ...
#'blog:detail',意思是 blog 应用下的 name=detail 的函数
#于是 reverse 函数会去解析这个视图函数对应的 URL,我们这里 detail 对应的规则就是 post/(?P<pk>[0-9]+)/ 这个正则表达式,
# 而正则表达式部分会被后面传入的参数 pk 替换
def get_absolute_url(self):
return reverse('blog:detail', kwargs={'pk': self.pk})
首先index函数会返回从数据库中取到的文章列表对象:
def index(request):
#order_by 方法对这个返回的 queryset 进行排序。排序依据的字段是 created_time,即文章的创建时间。- 号表示逆序
post_list = Post.objects.all().order_by('-create_time')
return render(request, 'blog/index.html', context={'post_list':post_list})
在index.html中
{% for post in post_list %}
<article class="post post-{{ post.pk }}">
<header class="entry-header">
<h1 class="entry-title">
<a href={{ post.get_absolute_url }}>{{ post.title }}</a>
... ...
当点击标题的时候,调用Post类中的get_absolute_url 方法,该方法中的reverse函数反向解析
调用blog命名空间中名字为detail的解析项:
url(r'^post/(?P<pk>[0-9]+)/$', views.detail, name='detail'),最终会调用views.detail函数
返回文章详细内容的页面,支持markdown语法解析.
一个简单的需求: 在博客的主页的右侧列出所有的文章分类,当点击相应的分类的时候,列出这个分类下的所有文章.
此时,就需要用到url反向解析,Django里面的视图函数命名空间技术.
具体代码实现就是在urls.py中声明app_name:
app_name = 'blog'之后在url匹配中添加name参数:
url(r'^category/(?P<pk>[0-9]+)/$', views.category, name='category'),这样可以匹配 category/某个数字
在html中
<a href="{% url 'blog:category' category.pk %}">此时通过blog命名空间中的名字为category的匹配项匹配到views下面的cateory函数,并把 category.pk参数传给category函数
category函数的实现为:
def category(request, pk): cate = get_object_or_404(Category, pk=pk) #根据主键值取得分类的名字 post_list = Post.objects.filter(category=cate).order_by('-create_time') return render(request, 'blog/index.html', context={'post_list':post_list})根据从数据库里面取到的值重新渲染index.html模板,拿到该分类的所有文章.
用法二:
在models数据表类中定义reverse方法:
class Post(models.Model):
#标题
title = models.CharField(max_length=70)
... ...
#'blog:detail',意思是 blog 应用下的 name=detail 的函数
#于是 reverse 函数会去解析这个视图函数对应的 URL,我们这里 detail 对应的规则就是 post/(?P<pk>[0-9]+)/ 这个正则表达式,
# 而正则表达式部分会被后面传入的参数 pk 替换
def get_absolute_url(self):
return reverse('blog:detail', kwargs={'pk': self.pk})
首先index函数会返回从数据库中取到的文章列表对象:
def index(request):
#order_by 方法对这个返回的 queryset 进行排序。排序依据的字段是 created_time,即文章的创建时间。- 号表示逆序
post_list = Post.objects.all().order_by('-create_time')
return render(request, 'blog/index.html', context={'post_list':post_list})
在index.html中
{% for post in post_list %}
<article class="post post-{{ post.pk }}">
<header class="entry-header">
<h1 class="entry-title">
<a href={{ post.get_absolute_url }}>{{ post.title }}</a>
... ...
当点击标题的时候,调用Post类中的get_absolute_url 方法,该方法中的reverse函数反向解析
调用blog命名空间中名字为detail的解析项:
url(r'^post/(?P<pk>[0-9]+)/$', views.detail, name='detail'),最终会调用views.detail函数
def detail(request, pk): post = get_object_or_404(Post, pk = pk) #根据models中reverse函数返回的pk键值查找对应的内容 post.body = markdown.markdown(post.body, extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', 'markdown.extensions.toc', ]) return render(request, 'blog/detail.html', context={'post':post})
返回文章详细内容的页面,支持markdown语法解析.
相关文章推荐
- django反向解析URL和URL命名空间的方法
- Django url反向解析与路由分发名称空间
- Python3之Django Web框架URL匹配、反向解析及部分错误处理
- Django URL 命名空间
- Django中url使用命名空间的错误
- Django之URL的命名空间和命名模式
- Django的url反向解析
- Django url的反向解析
- Django url反向解析 reverse()
- Django之URL的命名空间和命名模式
- django 命名空间详解
- C# XML解析方式实例解析 (带命名空间的)
- PHP命名空间规则解析及高级功能
- HTTP 无法注册 URL http://+:9999/CalculatorService/。进程不具有此命名空间的访问权限
- iBatis 开启命名空间,及各设置解析
- spring源码(4)之解析默认命名空间
- 由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作
- django 后端反向生成url
- struts2点击action请求url重复命名空间
- Spring4.3.x 浅析xml配置的解析过程(9)——解析aop命名空间之config标签