Django会启动DetailView而不是ListView,这与urls.py中定义的相反

时间:2018-11-14 10:53:49

标签: django python-3.x django-views

我发现我的django应用程序有一个非常奇怪的行为,我不理解。也许有人看到一个明显的错误,而我却没有看到。我也必须是管理员,我不是django的专家...
我有一个模型-Exposure和我的应用app_name = 'BPMWebGUI' 一个用户可以有暴露,而我正在使用默认的django用户模型。

urls.py

urlpatterns = [
path('', views.user_login, name='user_login'),    
path('<slug:slug>/', views.ExposureDetailView.as_view(), name='exposure_detail'),
path('my_exposures/', views.ExposureListView.as_view(), name='user_exposure_list'),
]

链接href="{% url 'BPMWebGUI:user_exposure_list' %}有效且网址为: 127.0.0.1:8000/BPMWebGUI/file_upload / 出现在浏览器中

views.py

from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import Http404
from .models import Exposure, User

class ExposureDetailView(LoginRequiredMixin, DetailView):
    model = Exposure

    def __init__(self,*args, **kwargs):
        print("Exposure Detail View initiated")
        super(DetailView, self).__init__(*args, **kwargs)


class ExposureListView(LoginRequiredMixin, ListView):
    model = Exposure
    template_name = 'BPMWebGUI/user_exposure_list.html'

    def __init__(self,*args, **kwargs):
        print("Exposure List View initiated")
        super(ExposureListView, self).__init__(*args, **kwargs)

    def get_queryset(self):
        try:
            print('get query set is called')
            self.exposure_user = User.objects.prefetch_related('exposures').get(
                username__iexact=self.kwargs.get("username")
            )
        except User.DoesNotExist:
            print("I was here")
            raise Http404
        else:
            return self.exposure_user

当我在调试模式下运行代码时,我总是以ExposureDetailView的__init__()结尾,而不是以ExposureListView结尾。如果我想查看某些“曝光”的详细信息,则可以正确进入DetailView。有人可以帮忙吗?还是提供的信息不足?谢谢大家!

1 个答案:

答案 0 :(得分:1)

my_exposures是有效的子弹。 Django不知道您没有将其用作子弹,但意味着它会进入列表视图。您可以通过交换网址格式的顺序来解决此问题:

path('my_exposures/', views.ExposureListView.as_view(), name='user_exposure_list'),
path('<slug:slug>/', views.ExposureDetailView.as_view(), name='exposure_detail'),