Передача слага из шаблона в представление в django

У меня есть приложение, в котором я пытаюсь передать поле slug из шаблона (frames.html) в views.py. Моя проблема в том, что я вижу, как URL-адрес меняется при нажатии на ссылку на framework.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))

Как я уже упоминал, я вижу, как мой URL-адрес меняется с http://127.0.0.1:8000/frames/ на http://127.0.0.1:8000/frames/FR123/ после того, как я щелкаю ссылку на frames.html. Я неправильно настраиваю его в urls.py? Я новичок в python/django. Пожалуйста, помогите мне. Заранее спасибо.


person naiveDeveloper    schedule 08.07.2014    source источник
comment
Замедлите остальную часть вашего urls.py, пожалуйста.   -  person Daniel Roseman    schedule 08.07.2014


Ответы (1)


Проблема в ваших URL. Ваш URL-адрес frames не завершает регулярное выражение в конце. Таким образом, он также соответствует всему, что просто начинается с "frames", включая "frames/FR123".

Вы должны убедиться, что все URL-адреса явно заканчиваются на $, чтобы предотвратить это.

url(r'^frames/$', 'vTryON.views.VTryONAll'),
person Daniel Roseman    schedule 08.07.2014
comment
Привет, я поставил $ в своем URL-адресе, как вы сказали. Теперь я вижу, что он переходит к views.py (операторы печати печатаются). Однако, когда я пытаюсь отобразить ответ на шаблон (selectedframe.html), он дает мне шаблон. Это дает мне TemplateDoesNotExist в /frames/fr123/, хотя у меня есть selectedframe.html в папке шаблонов. В чем может быть проблема? - person naiveDeveloper; 10.07.2014