Django Views和URL更近一步

很多时候我们希望给view中的函数逻辑传入参数, 从而呈现我们想要的结果。

现在我们这样做, 在my_blog/article/views.py加入如下代码:

  1. def detail(request, my_args):
  2. return HttpResponse("You're looking at my_args %s." % my_args)

在my_blog/my_blog/urls.py中设置对应的url

  1. urlpatterns = patterns('',
  2. # Examples:
  3. # url(r'^$', 'my_blog.views.home', name='home'),
  4. # url(r'^blog/', include('blog.urls')),
  5. url(r'^admin/', include(admin.site.urls)),
  6. url(r'^$', 'article.views.home'),
  7. url(r'^(?P<my_args>\d+)/$', 'article.views.detail', name='detail'),
  8. )

^(?P<my_args>\d+)/$这个正则表达式的意思是将传入的一位或者多位数字作为参数传递到views中的detail作为参数, 其中?P<my_args>定义名称用于标识匹配的内容。

一下url都能成功匹配这个正则表达数。

http://127.0.0.1:8000/1000/

http://127.0.0.1:8000/9/

尝试传参访问数据库

修改在my_blog/article/views.py代码:

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from article.models import Article
  4. # Create your views here.
  5. def home(request):
  6. return HttpResponse("Hello World, Django")
  7. def detail(request, my_args):
  8. post = Article.objects.all()[int(my_args)]
  9. str = ("title = %s, category = %s, date_time = %s, content = %s"
  10. % (post.title, post.category, post.date_time, post.content))
  11. return HttpResponse(str)

这里最好在admin后台管理界面增加几个Article对象, 防止查询对象为空, 出现异常。

现在可以访问http://127.0.0.1:8000/1/

显示如下数据表示数据库访问正确(这些数据都是自己添加的), 并且注意Article.objects.all()返回的是一个列表。

d7