为什么要将父属性设置为as_view,有效的子类视图?

时间:2015-12-07 04:09:05

标签: python django

我有一个基于类的自定义视图:

class GreetingView(View):
    greeting = "Good Day"
    def get(self,request):
       return HttpResponse(self.greeting)

class MorningGreetingView(GreetingView):
    greeting = "Morning to ya"

我的urls.py设置如下:

urlpatterns = [
    url(r'greeting/',GreetingView.as_view(greeting="G'day")),
    #override that in a subclass
    url(r'subgreeting/',MorningGreetingView.as_view()),
    #TODO (is a bug ? why I set the argument for the parent.as_view
    #method ,is effetive to subclass ...

] 当我去127.0.0.1:8000/subgreeting/时,它会告诉我“G'day”那应该是“Morning to ya”!有人能帮我吗 ? 先感谢您!

1 个答案:

答案 0 :(得分:0)

这里的问题在于您使用的网址正则表达式。他们应该是

url(r'^greeting/$', GreetingView.as_view(greeting="G'day")),
url(r'^subgreeting/$', MorningGreetingView.as_view()),

注意^$,它们标记了startwith和endwith的正则表达式。

没有这两个,字符串' subgreeting'总是匹配正则表达式问候'作为问候'是'subgreeting'中的子字符串。这就是调用第一个url的原因。