Django视图与两个S ..

问题描述 投票:1回答:3

如何用两个slug写一个Django视图?

每个slu are来自不同的模型。

我想获得www.example.com/category/slug1/slug2

请提供示例代码。

views.朋友

class SubjectDetailView(generic.DetailView, SingleObjectMixin):
    model           = Programmesearch
    template_name   = 'mnsdirectory/subject_detail.html'
    slug_field      = 'subjectslug'
    slug_url_kwarg  = 'subjectslug'

URLs.朋友

app_name    = 'mnsdirectory'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'), #views.indexSubjectDetailView(View)
    path('study/<slug:subjectslug>/', views.SubjectDetailView.as_view(), name='subject-detail'),
    path('study-abroad/<slug:studylevelslug>/', views.StudylevelDetailView.as_view(), name='studylevel-list'),
    ]

models.朋友:

class Programmesearch(models.Model):
    full_subject_name   =   models.CharField(max_length=100, blank=False, null=False)
    subjectslug         =   models.SlugField(unique=True, editable=False, max_length=100)

class StudyLevel(models.Model):
    study_level     = models.CharField(max_length=100, blank=False, null=False)
    studylevelslug  = models.SlugField(unique=True, editable=False, max_length=100)
python-3.x django-views django-2.0
3个回答
1
投票

首先,我个人的建议是,你必须有一个良好的POO PYTHON基础并且熟悉MVT架构,Django工作的MVC模型视图控制器非常相似,现在在View中它是python的所有逻辑部分,那里是我们将要声明的地方,或者我们是否将结束在哪个模板中我们将绘制由VIEW-Server处理的数据。

那么,首先你要如何使用这两个模型,我们将做的是以下内容:

我们导入以下方法

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View

class SubjectDetailView(View):
    def get(self, request, *args, **kwargs):
        queryset = Programmesearch.objects.all()        
        return render(request, 'mnsdirectory/subject_detail.html', {'element':queryset})

最后只需在网址中输入:

path('study/slug1/slug2/', views.SubjectDetailView.as_view(), name='subject-detail'),

1
投票

完美然后发送到寺庙一个更复杂的字典2键:

class SubjectDetailView(View):
    def get(self, request, *args, **kwargs):
        queryset = Programmesearch.objects.all()
        queryset2 = StudyLevel.objects.all()           
        return render(request, 'mnsdirectory/subject_detail.html', {'element':queryset,'element2':queryset2})

0
投票

@ ulvi-damirli。您可以像这样使用urls.py:

URLs.朋友

re_path(r'^(?P<slug>[\w_-]+)/(?P<studylevel>[\w_-]+)/$', 
            views.SubjectDetailView.as_view(), name='subject-detail'),

在你的views.py中,你可以像这样抓住这些slu ::

views.朋友

class SubjectDetailView(generic.DetailView, SingleObjectMixin):
    model           = Programmesearch
    template_name   = 'mnsdirectory/subject_detail.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # subjectslug = self.object.slug # Not necessary since It's a DetailView
        studyLevel = StudyLevel.objects.filter(
                            study_level=self.kwargs.get('studylevel', None))

希望我能帮助你,让我知道它是否有效

© www.soinside.com 2019 - 2024. All rights reserved.