django 模板中url的处理

在模板中直接添加‘/home’这样的链接是十分不推荐的,因为这是一个相对的链接,在不同网页中打开可能会返回不一样的结果。

所以推荐的是

<a href="{{ object.get_absolute_url }}">{{ object.name }}</a>

这种方式,或者

<a href={% url ‘article‘ article.pk %} >

这里第二种方式同时需要在urls.py中设置,

url(r‘^article/(?P<pk>[0-9]+)/$‘, article, name=‘article‘),

同时对应的article_view应该有2个参数(request, pk)

  

get_absolute_url是一个方法,需要在model里声明一下;下面是官方的推荐使用方式

不推荐

# 不推荐def get_absolute_url(self):
    return "/people/%i/" % self.id# 推荐
def get_absolute_url(self):
    from django.core.urlresolvers import reverse
    return reverse(‘people.views.details‘, args=[str(self.id)])

# 不推荐
def get_absolute_url(self):
    return ‘/%s/‘ % self.name
<!-- BAD template code. Avoid! -->
<a href="/people/{{ object.id }}/">{{ object.name }}</a>

# 推荐
<a href="{{ object.get_absolute_url }}">{{ object.name }}</a>

  

更具体的可以参考一下 https://github.com/the5fire/django_selfblog/blob/master/selfblog/blog/models.py

这里作者使用了“伪静态url”,get_absolute_url方法如下:

def get_absolute_url(self):
        return ‘%s/%s.html‘ % (settings.DOMAIN, self.alias)

alias是自己设置的,生成的链接就是: http://example.com/alias这种,由于一篇文章的链接是固定的,所以看上去像静态页面一样  

  

参考链接:

https://github.com/the5fire/django_selfblog

http://huacnlee.com/blog/django-url-routes-and-get-absolute-url/

https://docs.djangoproject.com/en/1.9/ref/models/instances/

时间: 05-22

django 模板中url的处理的相关文章

Django 模板中引用静态资源(js,css等)

Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1.6/howto/static-files/ 大致步骤是这样的: 1.确保setting.py里的installed_apps中包括了django.contrib.staticfiles,没有的话大家给添上就行. 2.同样是在setting.py里面进行添加,我们需要添加静态资源相关的配置.可以这么写

django1.7 HTML模板中{%url%}的使用

例: 我们在模板中创建了一个类似这样的表格: 大家可以看到自后有2个操作:修改和删除 在Django中我们可以不适用JS和AJAX来完成这个动作, <a href="{% url 'list_delete' i.id %}">删除|</a>                          这里的i.id是通过表格循环生成的,具体是后端数据库的id主键,我们先把它当做一个变量来看待,如果我们在第4行点击删除或者修改,它的值就是4 <a href="

django模板中的自定义过滤器

(1)在APP下创建templatetags文件夹,与Models.py.views.py等同级,templatetags文件夹下添加__init__.py文件,可为空,再添加一个模块文件,例如cpt_filters.py,目录结构如下 myapp/ __init__.py models.py templatetags/ __init__.py cpt_filters.py views.py admin.py appa.py 目录下添加__init__.py文件可让python知道这里是pyth

Django模板中的数字自增

Django框架的模板提供了{% for %} 标签来进行循环 例如对集合进行循环是比较简单的 {% for row in v1 %} <div>{{row.name}}</div> {% endfor %} 但是在Django中,并不直接支持形如"int i = 0;i<100;i++" 这样的循环,Django有自己的自增方法 假设v1内有2个元素 1,从1开始正向自增    结果1,2 {% for row in v1 %} <div>{

Django 模板.html中 href参数传入

在Django模板中可能会出现访问多个URL指向同一函数,为减少代码可以利用正则表达式实现 url(r'^remove_userinfo(?P<nid>\d+)/',views.removeuserinfo,name='reinfo'), (?P<nid>\d+)表示此部分的名称为nid,对应removeuserinfo(request,nid)中的nid参数 def removeuserinfo(request,nid): return HttpResponse(nid) 此时

Django模板系统学习整理

block extends include三者的差别跟用法 一.定义基础模板,在html内容中定义多个block块,block由子模板引用同名block块,来决定是否替换这些部分 {% block title %}一些内容,这里可不填{% endblock %} {% block content %}一些内容,这里可不填{% endblock %} {% block footer %}一些内容,这里可不填{% endblock %} 这里 title content footer 不是变量,名字

Django模板1

上一篇中带参数的URLconf虽然可以做到传参动态显示内容,但是最终现实的内容还是硬编码到Python代码中的 1 def hours_ahead(request,phours): 2 try: 3 phours = int(phours) 4 except VauleError: 5 raise Http404() 6 7 dt = datetime.datetime.now() + datetime.timedelta(hours=phours) 8 html = "<html>

Django中url使用命名空间的错误

出的错误: 1. Reverse for 'llist' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 2. Reverse for 'home' with arguments '(1L,)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'org/home/?P<org_id>(/d+)/$'] 出错原因

django removing hardcoded URLs in template --- 使用变量,把url放在变量中 {% url &#39;namespace:name&#39; %}

1 urlpatterns = [ 2 url(r'^admin/', admin.site.urls), 3 url(r'^votes/', include("polls.urls", namespace="polls")), 4 ] /myproject/urls.py 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 ''' 5 @version: 6 @author: leo Yang 7 @licen