如何获取传递给 django CBV 的 URL 参数?
Posted
技术标签:
【中文标题】如何获取传递给 django CBV 的 URL 参数?【英文标题】:How Do I get a URL parameter passed into a django CBV? 【发布时间】:2013-06-29 04:03:33 【问题描述】:我有一个 urls.py 文件设置如下
from django.conf.urls import patterns, include, url
from .views import *
urlpatterns = patterns('',
url(r'^$', BlogListView.as_view()),
url(r'(?P<blog_id>)\d1,/$', BlogDetailView.as_view())
)
与相关视图
class BlogDetailView(View):
def get(self, request, blog_id, *args, **kwargs):
post = Blog.objects.get(post_id=blog_id).to_detail_json
return HttpResponse(json.dumps(post), mimetype='application/json')
访问 127.0.0.1:8000/blog/1/ 时出现错误
ValueError at /blog/4/
invalid literal for int() with base 10: ''
但如果我改变了
post = Blog.objects.get(post_id=blog_id).to_detail_json
到
post = Blog.objects.get(post_id=1).to_detail_json
然后我得到正确的响应。
如果需要,这是我的模型
from mongoengine import *
from collections import OrderedDict
import datetime
import json
class Blog(Document):
post_id = IntField(unique=True)
title = StringField(max_length=144, required=True)
date_created = DateTimeField(default=datetime.datetime.now)
body = StringField(required=True)
def __init__(self, *args, **kwargs):
self.schema =
"title": self.title,
"date": str(self.date_created),
"id": self.post_id,
"body": self.body
super(Blog, self).__init__(*args, **kwargs)
@property
def to_detail_json(self):
fields = ["id","title", "date", "body"]
return key:self.schema[key] for key in fields
@property
def to_list_json(self):
fields = ["title", "date"]
return key:self.schema[key] for key in fields
更新
我将 BlogDetailView 更改为返回
return HttpResponse(json.dumps(self.kwargs),mimetype='application/json')
它给了我
blog_id: ""
这让我相信这是我的 urls.py 文件的问题,但我没有看到错误。
【问题讨论】:
【参考方案1】:原来是这样
url(r'(?P<blog_id>)\d1,/$', BlogDetailView.as_view())
应该是
url(r'(?P<blog_id>\d1,)/$', BlogDetailView.as_view())
【讨论】:
【参考方案2】:试试
post = Blog.objects.get(post_id=self.kwargs['blog_id']).to_detail_json
【讨论】:
不客气,顺便说一句,最好回答你自己的问题并将其标记为解决方案。以上是关于如何获取传递给 django CBV 的 URL 参数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要在 Django 中将 kwargs 设置为 CBV 的参数
Django:“如何在将 url() 传递给 MyClass.as_view() 之前从 url() 获取 slug?”或“如何检查注册是不是开放?”