【问题标题】:Django urls.py regular expressionsDjango urls.py 正则表达式
【发布时间】:2014-06-14 10:54:33
【问题描述】:

我完成了 Django 初学者教程,我正在尝试完成 [The Django Book: Chapter 7 Forms][1]。我在使用文档中的方法将 URLSconf 链接到 search_forms.html 页面时遇到问题。很可能是因为我使用了单独的 'main' 和 'app' urls.py 文件

谁能帮我确定正确的 URLconf 格式?我想在访问http://127.0.0.1:8000/polls/search-form/ 时看到search_forms.html 页面

我有一个位于 /src/project/urls.py 的主 urls.py 文件

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),   
)

我还有一个位于 /src/polls/urls.py 的投票 urls.py 你可以看到我已经尝试了一些解决方案。

urlpatterns = patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
    url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),


    #this one will bring me to the vote page when i type search-form in the browser
    #http://127.0.0.1:8000/polls/2/search-form/
    #url(r'^(?P<poll_id>\d+)/search-form/$', views.vote, name='search-form'),


    #url(r'^/search-form/$', views.search_form, name='search_form'),

    url(r'^search-form/$', views.search_form),

    #url(r'^(?P<poll_id>\d+)/search-form/$', views.search_form, name='search-form'),

    #url(r'^search-form/$', views.search_form),
    #url(r'^$', views.search_form, name='search-form/$'),  
   # url(r'^(?P<poll_id>\d+)/detail_dropdown/$', views.vote, name='detail_dropdown'),
)

我有一个位于 /src/polls/templates/polls/search_form.html 的 search_form.html 页面,其代码与教程中的代码相同

我还在 src/polls/views.py 使用以下代码设置了 search_form 视图

def search_form(request):
    return render(request, 'search_form.html')

非常感谢任何帮助。谢谢。

编辑:浏览器错误消息

感谢@Ailistar

我已经尝试使用未注释的 url,这是错误消息。

TemplateDoesNotExist at /polls/search-form/

search_form.html

Request Method:     GET
Request URL:    http://127.0.0.1:8000/polls/search-form/
Django Version:     1.6.2
Exception Type:     TemplateDoesNotExist
Exception Value:    

search_form.html

Exception Location:     /Library/Python/2.7/site-packages/django/template/loader.py in find_template, line 131
Python Executable:  /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Python Version:     2.7.6
Python Path:    

['/Users/brendan/Dropbox/workspace/bias_experiment/src',
 '/Library/Python/2.7/site-packages/distribute-0.7.3-py2.7.egg',
 '/Library/Python/2.7/site-packages/setuptools-2.2-py2.7.egg',
 '/Library/Python/2.7/site-packages/pip-1.5.4-py2.7.egg',
 '/Library/Python/2.7/site-packages/yolk-0.4.3-py2.7.egg',
 '/Library/Python/2.7/site-packages/virtualenv-1.11.4-py2.7.egg',
 '/Library/Python/2.7/site-packages/virtualenvwrapper-4.2-py2.7.egg',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
 '/Library/Python/2.7/site-packages']

Server time:    Mon, 28 Apr 2014 20:36:43 +0100

  [1]: http://www.djangobook.com/en/2.0/chapter07.html

【问题讨论】:

  • 从错误消息中可以明显看出这不是正则表达式的问题,而是模板的问题?
  • 只有当你知道这是正确的正则表达式才能使用。 Alasdair 证实了这一点。

标签: python regex django


【解决方案1】:

您问题中未注释的网址应该可以工作。给它命名是个好习惯。

url(r'^search-form/$', views.search_form, name="search_form"),

错误消息说明了问题所在。

TemplateDoesNotExist at /polls/search-form/

search_form.html

您已将模板放在“polls/search_form.html”中,但在您看来,您正在使用模板“search_form.html”。

要解决此问题,您可以将视图更改为

return render(request, 'polls/search_form.html')

或者您可以将模板移动到父目录/src/polls/templates/

如果上面的 url 模式不起作用,请更新您的问题,说明当您在浏览器中转到 /polls/search-form/ 时遇到什么错误。

【讨论】:

  • 我也是这么想的。添加了错误消息。谢谢
  • 我不得不使用第二个选项并将文件移动到父目录中。更改视图选项不起作用,出于兴趣,您知道原因吗?
  • 更改视图应该有效。您没有提供足够的信息来说明为什么没有。我很高兴第二个选项对你有用。
猜你喜欢
  • 2013-07-12
  • 2012-07-22
  • 1970-01-01
  • 2013-03-23
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
相关资源
最近更新 更多