带对象的网址

时间:2011-02-11 12:39:15

标签: django

我的urls.py中有元素

url(r'^name/(?P<some_id>.+)/$', Class(), name='name'),

有可能以某种方式在课堂上收到some_id吗?

2 个答案:

答案 0 :(得分:1)

你可以用装饰师做到这一点。

def accepts_some_object(f):
    def new_f(request, some_object_id, *args, **kwargs):
        some_object = get_object_or_404(...)
        return f(request, *args, **kwargs, some_object=some_object)
    return new_f

@accepts_some_object
def some_view(request, some_object)

如果您有许多接受some_object的观点,则非常有用。

答案 1 :(得分:1)

将类实例作为视图传递时,将执行其__call__方法。传递的参数与基于函数的视图相同(除self作为第一个参数外)。在正则表达式中捕获的文本将作为字符串传递给函数/方法。 (Capturing text in urls

class A(object):

    def __call__(self, request, some_id):
        # stuff

如果您还不知道这一点,Django将使用基于类的视图(除了基于函数),从版本1.3开始。 http://docs.djangoproject.com/en/dev/ref/class-based-views/