Django:Class 基于视图访问 URL 变量
Django: Class Based View accessing URL variables
我的 urls.py 有一个条目:
urlpatterns = [
url(r'^results/(?P<query>).+', views.ResultsView.as_view(), name="results"),
]
与相应的 Class 基于视图相匹配:
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 设置正确,因为请求解析到正确的页面 (results/),但所有尝试打印 dict return 的查询条目一个空字符串,json.dumps(kwargs, indent=1))
打印出:
HERE: {
"query": ""
}
我做错了什么?
只需复制我的评论作为答案即可。您错过了 url 的正则表达式中的模式部分。尝试将 url 更改为:
url(r'^results/(?P<query>[\w.-]+)', views.ResultsView.as_view(), name="results")
我的 urls.py 有一个条目:
urlpatterns = [
url(r'^results/(?P<query>).+', views.ResultsView.as_view(), name="results"),
]
与相应的 Class 基于视图相匹配:
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 设置正确,因为请求解析到正确的页面 (results/),但所有尝试打印 dict return 的查询条目一个空字符串,json.dumps(kwargs, indent=1))
打印出:
HERE: {
"query": ""
}
我做错了什么?
只需复制我的评论作为答案即可。您错过了 url 的正则表达式中的模式部分。尝试将 url 更改为:
url(r'^results/(?P<query>[\w.-]+)', views.ResultsView.as_view(), name="results")