关于 Django 的 URL 配置与 get_absolute_url 方法
2017-07-04 19:57
405 查看
转自:http://huacnlee.com/blog/django-url-routes-and-get-absolute-url/
今天白天的时候看了一篇文章《DJANGO'S URL TEMPLATE TAG SUCKS》,英文不是很好,大概的理解了一下,好像是讲,Django
Url 的设计不够好的地方。另外这篇文章向我们推荐了一下更好的URL写法。
<之前我在 Templates
里面调用URL地址都是用{% url apps.views.post post.user.slug,post.id %}这种方式来调用urls.py里面配置的URL地址,但是Template里面会用到很多,如果当参数有变动的时候,重构将会是很麻烦的事情。所以我需要调用一个固定的地方。
Django 的 Model
里面有一个get_absolute_url()的方法,这个东西是定义Model的对象的查看地址,主要是用在RSS与后台查看页面的,以前看RSS的文档里面的写法是直接组合URL地址,如:
但urls.py我们又定义了url的格式,这样在项目中就出现了两处关于这个页面的url配置,这样的以后做修改的时候就会有可能出现遗漏。
所以我们需要想办法当url的配置终一化,urls.py是被
Django 定义为url定义的,理所当然关于 url
的配置就应当写在这里,哪么 models
里面的get_absolute_url()怎么得到urls.py里面的定义呢?
查了一下官方文档:
http://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#get-absolute-url http://docs.djangoproject.com/en/dev/topics/http/urls/#topics-http-urls
这两篇里面有讲到关于我这种需求的实现,按着它的方式试,但一直没有成功,在 template
里面始终不出值,也没有错误(这个比较让我郁闷,大哥,再怎么来个提示哇,不然杂调试呀!)。
后面 Google
了一下,看到这篇文章《Django中models中get_absolute_url方法在管理端链接错误的解决方法》,终于把问题解决了,结合它的,总结一下:
今天白天的时候看了一篇文章《DJANGO'S URL TEMPLATE TAG SUCKS》,英文不是很好,大概的理解了一下,好像是讲,Django
Url 的设计不够好的地方。另外这篇文章向我们推荐了一下更好的URL写法。
<之前我在 Templates
里面调用URL地址都是用{% url apps.views.post post.user.slug,post.id %}这种方式来调用urls.py里面配置的URL地址,但是Template里面会用到很多,如果当参数有变动的时候,重构将会是很麻烦的事情。所以我需要调用一个固定的地方。
Django 的 Model
里面有一个get_absolute_url()的方法,这个东西是定义Model的对象的查看地址,主要是用在RSS与后台查看页面的,以前看RSS的文档里面的写法是直接组合URL地址,如:
1 2 3 4 5 6 7 | class Post(models.Model): title = models.CharFiled(max_length=200) slug = models.CharField(max_length=255) body = models.TextField() def get_absolute_url(self): return 'post/%s.html' % (self.slug) |
所以我们需要想办法当url的配置终一化,urls.py是被
Django 定义为url定义的,理所当然关于 url
的配置就应当写在这里,哪么 models
里面的get_absolute_url()怎么得到urls.py里面的定义呢?
查了一下官方文档:
http://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#get-absolute-url http://docs.djangoproject.com/en/dev/topics/http/urls/#topics-http-urls
这两篇里面有讲到关于我这种需求的实现,按着它的方式试,但一直没有成功,在 template
里面始终不出值,也没有错误(这个比较让我郁闷,大哥,再怎么来个提示哇,不然杂调试呀!)。
后面 Google
了一下,看到这篇文章《Django中models中get_absolute_url方法在管理端链接错误的解决方法》,终于把问题解决了,结合它的,总结一下:
urls.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # -*- coding: utf-8 -*- from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Home: (r'^$','apps.views.home'), url(r'^post/(?P<slug>[a-zA-Z0-9_\-]+)[/]{0,1}$','apps.views.post',name='post_view'), # Admin: (r'^admin/r/', include('django.conf.urls.shortcut')), (r'^admin/(.*)',admin.site.root), # Other: (r'^static/(.*)','django.views.static.serve', {'document_root': './static/'}), ) |
models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | # -*- coding: utf-8 -*- from django.db import models,connection from django.contrib import admin from django.core.urlresolvers import reverse class Post(models.Model): title = models.CharField('标题',max_length=200) slug = models.CharField('slug',max_length=255,blank=True) summary = models.TextField('摘要',blank=True) body = models.TextField('正文') def get_absolute_url(self): return reverse('post_view',args=[self.slug]) |
views.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # -*- coding: utf-8 -*- from django.http import HttpResponse,Http404, HttpResponseRedirect, HttpResponseServerError from django.template import Context, loader from django.shortcuts import get_object_or_404 def post(request,slug): post = None try: post = Post.objects.get(slug = slug) except: return Http404() data = { 'post' : post, } template = loader.get_template('post.html') context = Context(data) output = template.render(context) return HttpResponse(output) |
templates/post.html
1 2 3 4 5 6 7 | <div class="post"> <h1>{{ post.title }}</h1> <div class="url">URL:{{ post.get_absolute_url }}</div> <div class="summary"> {{ post.summary }} </div> </div> |
相关文章推荐
- Django get_absolute_url 用法
- 关于Http Get方法提交URL最大长度的限制
- django URL常用配置方法
- django配置url的方法
- Django关于filter和get()方法
- django学习——django中三种配置url的方法
- 在DJANGO中如何定义get_absolute_url
- 关于Servlet报错:405 HTTP method GET is not supported by this URL问题解决方法
- django中URL常用配置方法
- Django学习:URL配置方法(3)
- Django url 配置的三种方法
- Django项目中包含多个应用时对url的配置方法
- 关于inputStream.available()与HttpURLConnection.getContentLength()方法获取下载文件的大小
- 关于servlet中出现GET方法不能应用于此url的解决办法
- django URL常用配置方法
- 关于inputStream.available()与HttpURLConnection.getContentLength()方法获取下载文件的大小
- 关于AJAX应用的时候,出现open("GET",url,true)错误的解决方法!
- django中url与view配置方法
- 关于如何找到vmx文件(虚拟系统配置文件)的方法
- java.io.File 中 getPath(), getAbsolutePath() 和 getCanonicalPath() 三个方法的区别