Django:基于类的视图访问URL变量

时间:2017-09-12 04:49:07

标签: python django url django-class-based-views

我的urls.py有一个条目:

urlpatterns = [

    url(r'^results/(?P<query>).+', views.ResultsView.as_view(), name="results"),
]

与相应的基于类的视图匹配:

class ResultsView(TemplateView):

    template_name = os.path.join(APPNAME, "results.html")

    def dispatch(self, request, *args, **kwargs):
        query = kwargs['query']
        print("HERE: " + str(json.dumps(kwargs, indent=1)))
        print(self.kwargs['query'])
        print(self.kwargs.get('query'))
        print(kwargs['query'])
        print(kwargs.get('query'))

        if query is None:
            return redirect('/')
        return super(ResultsView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):

        context = super(ResultsView, self).get_context_data(**kwargs)
        print("HERE: " + str(json.dumps(kwargs, indent=1)))
        print(self.kwargs['query'])
        print(self.kwargs.get('query'))
        print(kwargs['query'])
        print(kwargs.get('query'))
        ...

    # This is just here to test if 'query' is set 
    def get(self, request, query):
        print(query)

我正在尝试获取urls.py中设置的query变量的值。但是,在尝试了我在其他SO帖子上找到的各种解决方案后(正如您从所有打印语句中看到的那样),没有任何工作。

我很确定我的urls.py设置正确,因为请求解析为正确的页面(结果/),但所有打印dict查询条目的尝试都返回一个空字符串,并{{1打印这个:

json.dumps(kwargs, indent=1))

我做错了什么?

1 个答案:

答案 0 :(得分:2)

只需将我的评论复制为答案。您错过了网址正则表达式中的模式部分。尝试将网址更改为:

url(r'^results/(?P<query>[\w.-]+)', views.ResultsView.as_view(), name="results")