在Django中将slug从模板传递给视图

0 投票
1 回答
1692 浏览
提问于 2025-04-18 12:27

我有一个应用程序,我想把一个叫做 slug 的字段从一个模板(frames.html)传递到 views.py。我的问题是,当我点击 frames.html 上的链接时,我看到网址在变化,但似乎没有到达视图(我在 views.py 中放了打印语句,但没有输出,所以我知道没有到达)。我的 frames.html 内容如下:

<div id="FramePage">
   {% for frame in Frames %}
     <p><a href="/frames/{{ frame.slug }}/">{{frame}}</a>                  
    {% endfor %}
</div>

这是我在 urls.py 中的设置:

urlpatterns = patterns('',
# Examples:
#url(r'^$', 'vTryON_Django.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'vTryON.views.home_page'),
url(r'^frames/', 'vTryON.views.VTryONAll'),
url(r'^frames/(?P<frameslug>.*)/$', 'vTryON.views.selectedFrame'),
url(r'^tryonpage/', 'vTryON.views.tryonpage'),
url(r'^uploadPC/', 'vTryON.views.uploadPC'),
url(r'^uploadWebcam/', 'vTryON.views.uploadWebcam'),

)

这是我在 views.py 中的视图函数:

def selectedFrame(request, frameslug):
    #print('selectedFrame')
    frame= VTryON.objects.get(slug=frameslug)
    #print(frame)
    context={'frame':frame}
    #print('context')
    return render_to_response('selectedframe.html', context, context_instance=RequestContext(request))

正如我提到的,我可以看到我的网址从 http://127.0.0.1:8000/frames/ 变成 http://127.0.0.1:8000/frames/FR123/,这是在我点击 frames.html 上的链接之后。请问我在 urls.py 中的配置是不是错了?我还是个 Python/Django 的初学者。请帮帮我。谢谢!

1 个回答

0

问题出在你的网址上。你的 frames 的网址没有在结尾处结束正则表达式。这就导致它会匹配任何以 "frames" 开头的东西,比如 "frames/FR123"。

你应该确保所有的网址都明确以 $ 结尾,这样才能避免这个问题。

url(r'^frames/$', 'vTryON.views.VTryONAll'),

撰写回答