【问题标题】:django generic DetailViewdjango 通用 DetailView
【发布时间】:2015-12-26 22:47:49
【问题描述】:

django 新手,真的很喜欢做事的简单性。但是在渲染通用 DetailView 时出现问题,因为我收到 405 错误声明方法不受支持。下面是我的代码。

from django.shortcuts import render, get_object_or_404, get_list_or_404
from django.views.generic import View, ListView, DetailView
from store.managers import StoreManager
from .models import Store

# Create your views here.
class StoreDetails(DetailView):
    model = Store
    template_name = 'store/details.html'

class StoreIndex(ListView):
    model = Store
    template_name = 'store/index.html'
    context_object_name = 'stores'
# url 
urlpatterns = [
url(r'^view/([0-9]+)/$', StoreDetails.as_view(), name='details'),
url(r'^index/$', StoreIndex.as_view(), name='index'),
]

虽然我的 StoreIndex 视图运行良好,但我的 StoreDetails 视图出现错误。尝试覆盖 get_context_data 函数但结果相同。

【问题讨论】:

  • 你能添加你的urls吗?
  • 这是我的网址:urlpatterns = [url(r'^view/([0-9]+)/$', StoreDetails.as_view(), name='details'),]
  • 您是否尝试在视图中添加get 函数?
  • 我没有添加“get”函数,因为我使用的是通用视图,我只想扩展我的 template_name 并让 django 处理其余部分。无论如何,添加一个 get 函数具有相同的结果
  • 什么是堆栈跟踪?

标签: django detailview


【解决方案1】:

问题在于 url 模式。 DetailView 需要主键才能找到要显示的正确对象,但模式r'^view/([0-9]+)/$' 并未指定应将匹配的数字用作主键。试试r'^view/(?P<pk>[0-9]+)/$'pk 代表主键)。

另见DetailView doocs 的示例(它提供slug 而不是pk)。 pkslug 不需要自定义 get_context_data

【讨论】:

  • 按照建议修改了 urlpatterns 但没有得到想要的结果。将进一步研究这一点。感谢您的帮助。
  • 很高兴看到确切的错误...您是否设置了任何日志记录?您的settings.py 中是否设置了DEBUG=True?这可能有助于打印异常(在浏览器中,或者在以./manage.py runserver 运行时在控制台上。
  • 我终于解决了这个问题,并意识到为什么我没有得到任何 StackTrace。我错误地将旧版本的 StoreDetails 视图类留在了与更新副本相同的文件中。将两个类与较旧的类放在文件中将我的 urlpattern 设置为使用较旧的视图类而不是更正的版本。按照您的建议删除旧的并添加 url 正则表达式参数修复了这些问题。谢谢
猜你喜欢
  • 2014-01-27
  • 2018-01-21
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2011-09-21
  • 2018-03-13
  • 2015-11-04
  • 1970-01-01
相关资源
最近更新 更多