Django中url的逆向解析 -> Reverse resolution of URLs
来源:互联网 发布:k近邻算法计算 编辑:程序博客网 时间:2024/05/22 10:39
之前的一篇文章中介绍了url的基本用法[Django的url用法]
解析的过程可以概括为
URL request -> view calling
同时,django又提供了另一种解析方式 - Reverse resolution of URLs
它的解析过程为
view calling -> URL request
因为Django奉行的是DRY原则,所以使用这种方式,就无需对url地址进行硬编码.在原本需要硬编码url的地方,直接可以使用url的名字,然后逆向解析出url地址.
Django提供了不同层面上的url解析方法.
- template文件: 用url模板标签
- python代码中可以使用django.core.urlresolvers.reverse()
- 其他get_absolute_url()
以一个简单的博客url规则来举例说明,导航页面如下
导航条的category都是从数据库读出的数据,其中每个category都是形如/blog/category/category_name的超链接,具体如下
- /blog/category/home/
- /blog/category/python/
- /blog/category/android/
- /blog/category/reading/
因此我们的url规则可以设计成如下形式
url(r'^category/(?P<cat_name>\w+)/$', 'category', name='list_category'),
这样category的名字会被当做参数传递给
category
这个view.同时给这条url规则命名为list_category
.模板文件中,生成导航条的代码如下
<nav id="site-nav"> {% for name in cat_all %} <a name="{{ name }}" href="{% url 'list_category' name %}" class="{% if name == cat_now %}active{% endif %}">{{ name|capfirst }}</a> {% endfor %} </nav>
如果文章列表需要分页,可以再添加一个url规则
url(r'^category/(?P<cat_name>\w+)/page/(?P<page_num>\d+)/$', 'category', name='page')
分页显示的模板代码
{% if posts.object_list and posts.paginator.num_pages > 1 %} <footer> {% if posts.has_previous %} <a href="{% url 'page' cat_now posts.previous_page_number %}"><</a> {% endif %} <span> {{ posts.number }} of {{ posts.paginator.num_pages }} </span> {% if posts.has_next %} <a href="{% url 'page' cat_now posts.next_page_number %}">></a> {% endif %} </footer> {% endif %}
最后是view的代码
from django.shortcuts import renderfrom django.core.paginator import Paginator, InvalidPage, EmptyPagefrom blog.models import Post, Categorydef category(request, cat_name, page_num=1): if cat_name.lower() == 'home': posts = Post.objects.all().order_by('-date') else: posts = Post.objects.all().filter(category__name=cat_name).order_by('-date') paginator = Paginator(posts, 3) try: page = int(page_num) except ValueError: page = 1 try: posts = paginator.page(page) except (InvalidPage, EmptyPage): posts = paginator.page(paginator.num_pages) return render(request, 'blog/index.html', { 'posts': posts, 'cat_now': cat_name, 'cat_all': map(lambda cat: cat.name, Category.objects.all()) })
2 0
- Django中url的逆向解析 -> Reverse resolution of URLs
- Django中url的逆向解析 -> Reverse resolution of URLs
- Django中关于URL配置文件urls.py的理解
- Django中关于URL配置文件urls.py的理解
- Django之逆向解析url
- Django之逆向解析url
- Django url反向解析 reverse()
- Django中那些关于urls的坑
- Django 中 urls 使用
- TCP-IP详解卷1-05:RARP:逆向地址解析协议(Reverse Address Resolution Protocol)
- Django的url解析
- DJango — URL的Reverse和Resolve
- Update your urlpatterns to be a list of django.conf.urls.url() instances instead. Django 1.10. Updat
- django中urls和views的基本用法
- Django urls.py的集中
- django中 出现(urls.W005) URL namespace 'admin' isn't unique.
- 仿照django的urls风格和模块化结构的flask项目(Django-Style URL Patterns for Flask)
- [django]urls.py 中重定向
- 5.10
- “破网”利器一箩筐——移动互联网分析工具推荐
- 没伞的雨天,我只能不断奔跑
- float型浮点数与double的区别
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- Django中url的逆向解析 -> Reverse resolution of URLs
- HDU 4587 —— TWO NODES(枚举+割顶)
- 机动车驾驶培训教学与考试大纲
- 米论坛 miluntan 微信公共账号 可以关注哦。谢谢大家!
- 动态规划—最长子序列问题
- qsort函数、sort函数 (精心整理篇)
- 黑马程序员(一)-------MAC OS X的初步认识
- 机器学习--K-means算法
- jplayer播放器完整标准的写法应该是这样的