无法从中捕获变量网址.py与视图.py

2024-03-29 12:57:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个url中捕获2个slug/变量,将它们传递给视图,然后使用视图将它们传递给模板。你知道吗

我电话里的相关线路网址.py地址:

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

我的视图.py地址:

from django.shortcuts import render

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

我试图基于vername值更改src<iframe>url,如下所示:

<iframe src="{% static 'docs/'|add:ver|add:'/'|add:name|add:'/_build/html/index.html' %}"></iframe>

在浏览器中查看时,我收到一个错误消息说'docs///_build/html/index.html'找不到。模板变量“ver”和“name”似乎从未设置,因此呈现为空字符串。如何允许从views.sphinxdoc函数设置这些变量?你知道吗


Tags: namepyadd视图模板urldocsrequest
2条回答

我想我会把解决方案贴在这里给其他可能遇到这个问题的人。你知道吗

我不知道为什么,但是当拉入vername作为函数参数时,它的变量类型没有被设置为string。为了解决这个问题,我将变量转换成字符串,如下所示:

从django.com快捷方式导入渲染

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)})

改变urls.py如下:

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

因为nameslug中可能有“-”,所以这不太管用。相反,我用了这个:

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

相关问题 更多 >