Django инициирует DetailView вместо ListView вопреки тому, что определено в urls.py - PullRequest
0 голосов
/ 14 ноября 2018

Я столкнулся с очень странным поведением моего приложения 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' %} и URL: 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

И когда я запускаю код в режиме отладки, я всегда заканчиваю __init__() в ExposureDetailView, а не в ExposureListView. Если я хочу увидеть детали некоторой экспозиции, я правильно попадаю в DetailView. Может ли кто-то помочь, или информации недостаточно? Спасибо всем заранее!

1 Ответ

0 голосов
/ 14 ноября 2018

my_exposures - действительный слаг. Джанго не может знать, что вы не использовали его как слизняк, но имели в виду, что он должен был перейти к представлению списка. Вы можете исправить это, поменяв местами шаблоны URL:

path('my_exposures/', views.ExposureListView.as_view(), name='user_exposure_list'),
path('<slug:slug>/', views.ExposureDetailView.as_view(), name='exposure_detail'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...