Как мне перенаправить URL, используя класс DetailView в Django? - PullRequest
1 голос
/ 26 марта 2012

Прежде чем я решу использовать DetailView, я перенаправил URL-адрес, используя это решение .

Теперь, когда я использую DetailView, как мне добиться такого же перенаправления?name должен быть таким же, поскольку я использую его для LOGIN_REDIRECT_URL в settings.py.

Вот как выглядит часть urls.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' ),
)

Ответы [ 3 ]

3 голосов
/ 26 марта 2012

Проверьте документы для оформления URL при использовании представлений на основе классов

from django.contrib.auth.decorators import login_required
urlpatterns = patterns( 'doors.views',
    url(r'^users/$',login_required(ListView.as_view(model = User,template_name = 'doors/users/list.html')),
    ...
),
1 голос
/ 26 марта 2012

Давайте не будем называть это перенаправлением , потому что это путается с перенаправлениями HTTP. Скажем так, мы хотим, чтобы представления вели себя одинаково, то есть они должны заканчиваться в одном коде и шаблоне. Это где я бы подкласс DetailView сам. Что-то вроде:

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

class SelfUserDetailView(UserDetailView):
    def get_object(self):
       return self.request.user

Затем в urls.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'),
0 голосов
/ 24 августа 2018

Это 2 способа сделать это в 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'))

2) Создайте отдельный вид в представлениях и определите там явный шаблон

Так вот URL

from django.urls import include, path
from crm.views import OrganisationDetailView

urlpatterns = [
    path('org/<int:pk>',OrganisationDetailView.as_view(), 
    name='organisation_detail')

А просмотров

from .models import Activity, Organisation
from django.views.generic.detail import DetailView


class OrganisationDetailView(DetailView):

    model = Organisation
    template_name = 'crm/org/org_detail_main.html' 
...