带有两个子弹的Django视图

时间:2018-09-17 12:54:49

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

如何编写带有两个子弹的Django视图?

每个子弹都来自不同的型号。

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

请提供示例代码。

Views.py

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

Urls.py

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.py:

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)

3 个答案:

答案 0 :(得分: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 :(得分: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})

答案 2 :(得分:0)

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

Urls.py

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

,并在您的 views.py 中,您可以像这样捕获这些:

Views.py

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

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