我正在尝试从网址捕获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'
函数设置这些变量?
答案 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)
我想通了,并认为我会在这里为其他可能会遇到这个问题的人发布解决方案。
我不确定原因,但在将ver
和name
作为功能参数时,其变量类型未设置为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)})