如何为多个url编写基于单个类的视图?

2024-05-14 10:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有url报告?id=1报告?学生=学士。对于这两个网址,我使用相同的基本网址'报告'网址.py. 你知道吗

网址.py

from .views import Reporting

urlpatterns = [
    path('', AnalyticsData.as_view()),
    path('reporting', Reporting.as_view()),
    path('index', index.as_view())
]

如何使用同一类视图执行不同的get方法,以便对第一个URL执行按id获取学生的方法,对第二个URL执行获取学士学生的方法。现在,我用以下方式编写代码

视图.py

class Reporting(APIView):

    def get(self, request):

        id = self.request.GET.get("id")
        student_type = self.request.GET.get("students")

        if id:
            *logic*
        if student_type=="bachelor":
            *logic*

但我不知道这是不是正确的方法。此外,如果有多个参数,则会有许多if条件。还有别的办法吗?你知道吗


Tags: path方法pyselfviewidgetif
1条回答
网友
1楼 · 发布于 2024-05-14 10:18:13

在基于类的视图中,我会有一个变量来告诉调用它时要做什么。像这样的。这个var变量获取从urls.py调用它时所传递的任何内容的值,这样您就可以利用它了。你知道吗

class Reporting(APIView):

    var = "" # HERE

    def get(self, request):

        id = self.request.GET.get("id")
        student_type = self.request.GET.get("students")

        if id:
            *logic*
        if student_type=="bachelor":
            *logic*

然后在我的urls.py中,我将使用该参数调用类并相应地处理逻辑。你知道吗

from .views import Reporting

urlpatterns = [
    path('reporting', Reporting.as_view(var="yourvalue")), #HERE
]

然后根据var变量处理逻辑。 因此,如果您希望您的类在另一种情况下有不同的行为,那么您可以相应地更改var变量,并且行为也会发生变化。您只需要更改url中的值。你知道吗

urlpatterns = [
    path('reporting', Reporting.as_view(var="yourvalue")), #HERE
    path('new_reporting', Reporting.as_view(var="your_new_value"))
]

因此,对于您的案例,您可以将这个var传递给您的视图,然后您可以使用if else来处理get函数。别忘了self顺便说一句。你知道吗

if self.var == "id":
    # Logic for id
elif self.var == "students":
    # Logic for students

相关问题 更多 >

    热门问题