Django教程“写出实际做某事的观点”

时间:2015-02-11 21:59:11

标签: python regex django

我一直在研究Django教程。我就是这样的部分"写下实际做某事的观点。" (第3部分)

我尝试使用它为您提供的index.html模板,但我一直收到404错误

Request Method: GET
Request URL: http://127.0.0.1:8000/polls/index.html

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
^polls/ ^$ [name='index']
^polls/ ^(?P<question_id>\d+)/$ [name='detail']
^polls/ ^(?P<question_id>\d+)/results/$ [name='results']
^polls/ ^(?P<question_id>\d+)/vote/$ [name='vote']
^admin/
The current URL, polls/index.html, didn't match any of these.

我不知道其中一个正则表达式是错的吗?我现在已经搞乱了一段时间而且我没有运气让它上班。

我可以去/民意调查就好了。但/polls/index.html不起作用。

任何帮助将不胜感激。

我使用的Django版本是1.7.4

2 个答案:

答案 0 :(得分:5)

Django视图函数或类使用您定义的模板,因此您不必在URL中指定它。 urls.py文件与您定义的正则表达式匹配,以向视图发送请求。

如果真正想要使用该网址,则必须在^polls/index.html$中定义urls.py并将其指向您的观点。

答案 1 :(得分:0)

根据您的要求,您实际上想要在urlpatterns中的urls.py中定义的网址上输出静态html文件。

我强烈建议您查看基于类的视图。 https://docs.djangoproject.com/en/1.7/topics/class-based-views/#simple-usage-in-your-urlconf

从你所拥有的最快的方式到渲染polls/index.html会是这样的;

# some_app/urls.py
from django.conf.urls import patterns
from django.views.generic import TemplateView

urlpatterns = patterns('',
    (r'^polls/index.html', TemplateView.as_view(template_name="index.html")),
)

但我相信你会想要把东西传递给模板,所以基于类的视图将是你需要的。因此,添加上下文的上述替代方案将是;

# some_app/views.py
from django.views.generic import TemplateView

class Index(TemplateView):
    template_name = "index.html"

    def get_context_data(self, **kwargs):
        context = super(Index, self).get_context_data(**kwargs)
        context['foo'] = 'bar'
        return context

然后显然将{{ foo }}添加到您的index.html会向用户输出条形码。并且您要将urls.py更新为

# some_app/urls.py
from django.conf.urls import patterns
from .views import Index

urlpatterns = patterns(
    '',
    (r'^polls/index.html', Index.as_view()),
)