与TemplateView Django 404错误

时间:2017-07-26 14:16:17

标签: python django django-rest-framework

我在app中有网址,当我去文章报告网址时,我看到了django错误页面 使用文章的网址,但文章报告没有网址。

main.urls.py

from rest_framework import routers
from main.views import (ArticleViewSet)
from django.views.generic import TemplateView

router = routers.DefaultRouter()
router.register(r'article-report', TemplateView.as_view(template_name = 'report.html'),'report')
router.register(r'article', ArticleViewSet)
urlpatterns = router.urls

settings.py

的一部分
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

终端收到消息

[26/Jul/2017 14:22:14] "GET /article-report HTTP/1.1" 404 5777

P.S。 Pycharm在导入行中强调django,TemplateView和rest_framework。 但在其他例子中它并不重要

4 个答案:

答案 0 :(得分:3)

您应该将TemplateView作为url()添加到urlpatterns,而不是尝试将其注册到路由器。

router = routers.DefaultRouter()
router.register(r'article', ArticleViewSet)

urlpatterns = [
    url(r'article-report', TemplateView.as_view(template_name='report.html'), name='report')  # note kwarg name='report' instead of arg 'report'
]

urlpatterns += router.urls

答案 1 :(得分:1)

在您的settings.py文件中,确保report.html中添加了TEMPLATES -> DIRS的路径。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'quiz.templates')
            # your path instead of this ^
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

答案 2 :(得分:1)

你的模板DIR是空的......

在init DIR path

之前确保您的结构
my_app->
   my_app
   static
   templates->
      report.html
   manage.py 

同时使用确保您的网址使用它, name =' report'

<强> urls.py

url(r'article_report', TemplateView.as_view(template_name = 'report.html'), name='report') 

<强> settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'your_app.templates')
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'debug': DEBUG,
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'production_app.context.bot_context_processor'
            ],
        },
    },
]

答案 3 :(得分:-1)

.
├── djangooo
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── templates
    └── report.html




TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            'templates', # if you use templates folder, you add this.
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]