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/

时间: 2024-11-08 18:20:03

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

在 Django 模板中遍历复杂数据结构的关键是句点字符

在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ time.year }}

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里面进行添加,我们需要添加静态资源相关的配置.可以这么写

django 模板中定义临时列表

<ul class="num_t clr"> {% for obj in ""|ljust:"10" %} <li>{{ forloop.counter }}</li> {% endfor %} </ul> 官网是这样使用: ljust Left-aligns the value in a field of a given width. Argument: field size For exampl

django模板中使用加法,以及变量赋值

加法 django中自带过滤add {{ num|add:'12' }} 这样就表示num加12,有了加就有减法了~~~ 还可以{{ num|add:total }}还可以与其他属性相加 变量赋值 {% with distance=5 %} {# 自定义的属性只在with标签内可用 #} {% endwith %} django模板中使用加法,以及变量赋值

django模板中的extends和include使用方法

一.extends使用方法 首先extends也就是继承,子类继承父类的一些特性.在django模板中通过继承可以减少重复代码. 首先我们建立一个app,名字叫做hello.别忘了在settings.py中的INSTALLED_APPS注册这个app.不注册会出现hello目录下的templates中的模板无法调用. 1.在根目录下的templates创建base.html <!DOCTYPE html> <html lang="en"> <head>

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.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.    2.使用dot(.)能够访问变量的属性    3.当模板引擎碰到dot的时候,查找的顺序是什么样子呢?        a.字典查找,例如:foo["var1"]        b.属性查找,例如:foo.bar        c.方法查找,例如:foo.bar()        d.list-index查找,例如foo[bar] 注意:方法查找比一般的查找要复杂一些 (1

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 模板中通过变量替代key取字典内容

模板中通过变量替代key取字典内容 templatetags/├── get_item.py├── __init__.py ###get_item.py # coding=utf-8 from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxError register