【问题标题】:Passing slug from Template to View in django将 slug 从模板传递到 django 中的视图
【发布时间】:2014-08-28 19:55:53
【问题描述】:

我有一个应用程序,我试图将一个 slug 字段从模板 (frames.html) 传递到 views.py。我的问题是我看到点击frames.html上的链接时URL发生了变化,但它似乎没有到达视图。(我的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))

正如我所提到的,单击 frames.html 上的链接后,我可以看到我的 URL 从 http://127.0.0.1:8000/frames/ 更改为 http://127.0.0.1:8000/frames/FR123/。 我在 urls.py 中配置错误吗?我是 python /django 的初学者。请帮帮我。在此先感谢。

【问题讨论】:

  • 请放慢 urls.py 的其余部分。

标签: python django django-templates django-views slug


【解决方案1】:

问题在于您的网址。您的 frames URL 最后不会终止正则表达式。所以它也匹配任何以“frames”开始的内容,包括“frames/FR123”。

您应该确保所有 URL 都明确地以 $ 结尾以防止这种情况发生。

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

【讨论】:

  • 嗨,我像你说的那样在我的网址中输入了 $。现在,我看到它转到了 views.py(打印语句被打印)。但是,当我尝试将响应呈现给模板 (selectedframe.html) 时,它确实给了我模板。它在 /frames/fr123/ 处给了我一个 TemplateDoesNotExist,尽管我在模板文件夹中有 selectedframe.html。可能是什么问题?
猜你喜欢
  • 2015-09-18
  • 2015-07-07
  • 2018-02-10
  • 2021-02-03
  • 2017-04-26
  • 2016-09-28
  • 2020-03-19
  • 2019-02-16
  • 1970-01-01
相关资源
最近更新 更多