【发布时间】: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 %}
标签: python django django-views django-class-based-views