Django:将字符串参数传递给基于类的视图不起作用
Posted
技术标签:
【中文标题】Django:将字符串参数传递给基于类的视图不起作用【英文标题】:Django: Passing string parameters to class-based view not working 【发布时间】:2016-07-28 12:32:19 【问题描述】:我尝试按照this suggestion 将字符串参数传递给基于类的视图,但它似乎不起作用。
网址:
url(r'^chart/(?P<chart_name>\w+)/$',
ChartView.as_view(chart_name='chart_name'), name="chart_url"),
观点:
class ChartView(View):
template_name = "chart.html"
chart_name = None
def post(self, request, *args, **kwargs):
form = DatesForm(request.POST)
context =
'form': form
return render(request, self.template_name, context)
def get(self, request, *args, **kwargs):
print("test")
form = DatesForm()
# fetch plot data (default values used)
context =
'form': form,
'chart_name': self.chart_name
return render(request, self.template_name, context)
应该重定向到视图的链接:
<a href="% url 'chartboard:chart_url' chart_name='lords' %">Sometext</a>
(项目 urlconf 中给出的命名空间“chartboard”)。
错误:
NoReverseMatch at /chart/lords/
Reverse for 'chart_url' with arguments '()' and keyword arguments '' not found. 1 pattern(s) tried: ['chart/(?P<chart_name>\\w+)/$']
不管怎样,“test”会被打印两次到控制台输出(为什么?)
在 Ubuntu 14.04.04 上使用 django 1.8.11 和 python 3.4.3
【问题讨论】:
回溯是否显示导致错误的行?我不认为这是您发布的链接,因为chart_name='lords'
与错误消息不匹配。
@Alasdair 是的,你是对的!我在模板的另一个地方使用这个没有参数的 url,因此出现了特定的错误
您解决了这个问题吗?如果没有,请发布失败的行。
现在好了。这是失败的行:<form action="% url 'chartboard:chart_url' %" method="post" class="form-inline">% csrf_token %
。它现在已被替换为:<form action="% url 'chartboard:chart_url' chart_name=chart_name %" method="post" class="form-inline">% csrf_token %
【参考方案1】:
您应该使用kwargs
访问chart_name
:
# urls.py
url(r'^chart/(?P<chart_name>\w+)/$',
ChartView.as_view(), name="chart_url"),
# and then in the view
class ChartView(View):
template_name = "chart.html"
def get(self, request, *args, **kwargs):
form = DatesForm()
context =
'form': form,
'chart_name': kwargs['chart_name'] # here you access the chart_name
return render(request, self.template_name, context)
您考虑实现这一点的帖子是为了确保一个变量在模板中可用,并通过在传递给模板渲染的context
中设置它来处理。
您在这里面临的问题是访问在 url 模式中定义的 named group
。
这里有更多documentation 在您尝试访问 URL 时如何处理请求。
【讨论】:
以上是关于Django:将字符串参数传递给基于类的视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何正确地将参数传递给基于类的视图测试 Django Rest Framework?