如何使用Django中的DetailView类重定向url?

如何使用Django中的DetailView类重定向url?,django,django-urls,Django,Django Urls,在我决定使用DetailView之前,我使用了一个url重定向 现在我正在使用DetailView如何实现相同的重定向?名称必须相同,因为我在settings.py中对LOGIN\u REDIRECT\u URL使用该名称 下面是url.py的一部分 urlpatterns = patterns( 'doors.views', url( r'^users/$', ListView.as_view( model = User,

在我决定使用
DetailView
之前,我使用了一个url重定向

现在我正在使用
DetailView
如何实现相同的重定向?
名称必须相同,因为我在
settings.py
中对
LOGIN\u REDIRECT\u URL
使用该名称

下面是
url.py
的一部分

urlpatterns = patterns( 'doors.views',
    url(
        r'^users/$',
        ListView.as_view(
            model = User,
            template_name = 'doors/users/list.html'
        ),
    ),
    url(
        r'^users/(?P<pk>\d+)/$',
        DetailView.as_view(
            model = User,
            template_name = 'doors/users/detail.html'
        ),
        name = 'users_detail'
    ),
    url( r'^users/self/$', # do some kind of redirect 'users_self_detail', name = 'users_self_detail' ),
)
urlpatterns=patterns('doors.views',
网址(
r“^users/$”,
ListView.as_视图(
模型=用户,
模板名称='doors/users/list.html'
),
),
网址(
r“^users/(?P\d+/$”,
DetailView.as\u视图(
模型=用户,
模板名称='doors/users/detail.html'
),
名称='users\u detail'
),
url(r“^users/self/$”,#执行某种重定向“users\u self\u detail”,name=“users\u self\u detail”),
)

我们不要称之为重定向,因为这会与HTTP重定向混淆。让我们假设我们希望视图的行为相同,即它们应该在相同的代码和模板中结束。在这里,我将为自己创建子类
DetailView
。比如:

class UserDetailView(DetailView):
    model = User
    template_name = 'doors/users/detail.html'

class SelfUserDetailView(UserDetailView):
    def get_object(self):
       return self.request.user
然后在
url.py
中:

from django.contrib.auth.decorators import login_required
from myapp.views import UserDetailView, SelfUserDetailView
url(r'^users/(?P<pk>\d+)/$', UserDetailView.as_view(), name='users_detail'),
url(r'^users/self/$', login_required(SelfUserDetailView.as_view()), name='users_self_detail'),
从django.contrib.auth.decorators导入登录名\u必需
从myapp.views导入UserDetailView、SelfUserDetailView
url(r“^users/(?P\d+/$”,UserDetailView.as\u view(),name='users\u detail'),
url(r“^users/self/$”,需要登录(SelfUserDetailView.as\u view()),name='users\u self\u detail'),
我们不要称之为重定向,因为这会与HTTP重定向混淆。让我们假设我们希望视图的行为相同,即它们应该在相同的代码和模板中结束。在这里,我将为自己创建子类
DetailView
。比如:

class UserDetailView(DetailView):
    model = User
    template_name = 'doors/users/detail.html'

class SelfUserDetailView(UserDetailView):
    def get_object(self):
       return self.request.user
然后在
url.py
中:

from django.contrib.auth.decorators import login_required
from myapp.views import UserDetailView, SelfUserDetailView
url(r'^users/(?P<pk>\d+)/$', UserDetailView.as_view(), name='users_detail'),
url(r'^users/self/$', login_required(SelfUserDetailView.as_view()), name='users_self_detail'),
从django.contrib.auth.decorators导入登录名\u必需
从myapp.views导入UserDetailView、SelfUserDetailView
url(r“^users/(?P\d+/$”,UserDetailView.as\u view(),name='users\u detail'),
url(r“^users/self/$”,需要登录(SelfUserDetailView.as\u view()),name='users\u self\u detail'),

在Django 2中,有两种方法可以做到这一点。 可以在中创建视图和定义模板路径

1) 在url文件中创建视图并在其中定义路径

from django.urls import  path
from django.views.generic import ListView, DetailView
from crm.models import Organisation

urlpatterns = [
    path('org/<int:pk>', DetailView.as_view(model=Organisation, 
template_name = 'crm/org/org_detail_main.html'))

在Django 2中,有两种方法可以做到这一点。 可以在中创建视图和定义模板路径

1) 在url文件中创建视图并在其中定义路径

from django.urls import  path
from django.views.generic import ListView, DetailView
from crm.models import Organisation

urlpatterns = [
    path('org/<int:pk>', DetailView.as_view(model=Organisation, 
template_name = 'crm/org/org_detail_main.html'))

既然我已经在那里导入了
DetailView
,我是否应该在
urls.py
中创建子类
DetailView
?我个人将子类放在我的应用程序
views.py
中,类似于编写自己的基于函数的视图时。否则你的
url.py
将变得巨大-我们现在在我工作的网站上有超过100个自定义的基于类的视图。把
@login\u required
放在
类SelfUserDetailView
之上怎么样?有什么特别的原因让你把
urls.py
放进去吗?我不确定装饰器是否已经被更新以适用于基于类的视图,所以我避免这样做。(这可能只是因为我在使用1.3版本之前的东西。)Django 1.9引入了一个类,该类相当于登录所需的方法/函数。既然我已经在那里导入了
DetailView
,我应该在
urls.py
中对
DetailView
进行子类化吗?我个人将子类放入我的应用程序
views.py
,与编写自己的基于函数的视图时类似。否则你的
url.py
将变得巨大-我们现在在我工作的网站上有超过100个自定义的基于类的视图。把
@login\u required
放在
类SelfUserDetailView
之上怎么样?有什么特别的原因让你把
urls.py
放进去吗?我不确定装饰器是否已经被更新以适用于基于类的视图,所以我避免这样做。(这可能只是因为我使用的是1.3版本之前的东西。)Django 1.9引入了与login_required方法/函数等效的类。