使用views.py从urls.py中捕获变量时遇到问题

时间:2014-10-16 22:44:48

标签: python django django-views django-urls

我正在尝试从网址捕获2个slug /变量,将它们传递给视图,然后使用视图将它们传递给模板。

来自我的urls.py的相关行:

url(r'^docs/(?P<ver>)[-\w]+/(?P<name>)[-\w]+/$', views.sphinxdoc),

我的views.py:

from django.shortcuts import render

def sphinxdoc(request, ver, name):
    context = {'ver': ver, 'name': name}
    return render(request, 'sphinx-documentation.html', context)

我正在尝试根据src<iframe>值更改ver的{​​{1}}网址,如下所示:

name

在浏览器中查看时,出现错误消息,指出无法找到<iframe src="{% static 'docs/'|add:ver|add:'/'|add:name|add:'/_build/html/index.html' %}"></iframe> 。它似乎是模板变量&#39; ver&#39;和&#39; name&#39;永远不会被设置,因此呈现为空字符串。我如何允许从'docs///_build/html/index.html'函数设置这些变量?

2 个答案:

答案 0 :(得分:2)

像这样更改urls.py

url(r'^docs/(?P<ver>\w+)/(?P<name>\w+)/$', views.sphinxdoc),

由于name slu can可能包含&#34; - &#34;&#34;&#34;&#34;&#34;&#34;&#34;&#34;相反,我使用了这个:

url(r'^docs/(?P<ver>[-\w]+)/(?P<name>[-\w]+)/$, views.sphinxdoc),

答案 1 :(得分:1)

我想通了,并认为我会在这里为其他可能会遇到这个问题的人发布解决方案。

我不确定原因,但在将vername作为功能参数时,其变量类型未设置为string。为了解决这个问题,我只是将变量转换为字符串,如下所示:

来自django.shortcuts导入渲染

def sphinxdoc(request, ver, name):
    ver = str(ver)
    name = str(name)
    return render(request, 'sphinx-documentation.html', {'ver': ver, 'name': name})

这解决了这个问题。

编辑:此外,您可以通过内联字符串转换来简化...

def sphinxdoc(request, ver, name):
    return render(request, 'sphinx-documentation.html', {'ver': str(ver),
                                                         'name': str(name)})