首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django视图混乱,两个视图显示相同的内容

Django视图混乱,两个视图显示相同的内容
EN

Stack Overflow用户
提问于 2020-11-03 00:30:05
回答 1查看 30关注 0票数 0

我有一个python django应用程序。我有一个视图,我对其进行了复制和稍微更改,以创建第二个视图。但它们似乎是挂钩在一起的,复制了页面内容,而它们应该是不同的。

这是我的urls.py

代码语言:javascript
复制
from django.urls import path, include
from django.contrib.auth import views as auth_views
from django.views.generic.base import RedirectView

from . import views

app_name = 'app'
urlpatterns = [

    # Journals by Discipline
    path('journals-by-discipline/', views.journals_by_discipline, name='journalsByDiscipline'),
    path('journals-by-discipline/chart-data/<str:discipline>/', views.journals_by_discipline_chart_data),
    path('journals-by-discipline/journals-and-disciplines-map/', views.get_journals_and_disciplines_map),
    path('journals-by-discipline/disciplines-list/', views.disciplines_list), 

    # Journals By Discipline (Elsevier)
    path('journals-by-discipline-elsevier/', views.journals_by_discipline_elsevier, name='journalsByDisciplineElsevier'),
    path('journals-by-discipline/chart-data/<str:discipline>/', views.journals_by_discipline_chart_data_elsevier),
    path('journals-by-discipline/journals-and-disciplines-map/', views.get_journals_and_disciplines_map),
    path('journals-by-discipline/disciplines-list/', views.disciplines_list), 
]

我有两个视图,journals_by_discipline和journals_by_discipline_elsevier

这是我的views.py

代码语言:javascript
复制
from django.shortcuts import get_object_or_404, render
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from rest_framework.decorators import api_view
from rest_framework.response import Response
import datetime as datetime
from dateutil.relativedelta import relativedelta
from urllib.parse import unquote
import json
from .onefigr_analysis import Data

# Instantiate Data object to fetch data across all views
data = Data()


# Journals by Discipline Page

def journals_by_discipline(request):
    template_name = 'app/journals-by-discipline.html'
    return render(request, template_name)

@api_view(['GET'])
def disciplines_list(request):

    if request.method == 'GET':
        return Response(data.get_disciplines_list())

@api_view(['GET'])
def journals_by_discipline_chart_data(request, discipline):

    if request.method == 'GET':
        query_discipline = unquote(discipline)
        return Response(data.journals_by_discipline_chart_data(discipline)) 

@api_view(['GET'])
def get_journals_and_disciplines_map(request):

    if request.method == 'GET':
        return Response(data.journals_and_disciplines_map())        



# Journals by Discipline Elsevier Page

def journals_by_discipline_elsevier(request):
    template_name = 'app/journals-by-discipline-elsevier.html'
    return render(request, template_name)   

@api_view(['GET'])
def disciplines_list(request):

    if request.method == 'GET':
        return Response(data.get_disciplines_list())

@api_view(['GET'])
def journals_by_discipline_chart_data_elsevier(request, discipline):

    if request.method == 'GET':
        query_discipline = unquote(discipline)
        return Response(data.journals_by_discipline_chart_data_elsevier(discipline)) 

@api_view(['GET'])
def get_journals_and_disciplines_map(request):

    if request.method == 'GET':
        return Response(data.journals_and_disciplines_map()) 

在我尝试创建第二个视图(journals by discipline elsevier)时,我复制了用于创建第一个视图的逻辑。但结果是两个页面都是相同的。

在我的Data()类中,我有两个方法:journals_by_discipline_chart_datajournals_by_discipline_chart_data_elsevier,它们相似但不相同。我试图在我的views.py文件中以不同的方式调用它们,但它不能正常工作。

如何解开这两个视图?

EN

回答 1

Stack Overflow用户

发布于 2020-11-03 00:41:38

代码语言:javascript
复制
path('journals-by-discipline/', views.journals_by_discipline),
path('journals-by-discipline/chart-data/<str:discipline>/', views.journals_by_discipline_chart_data),

path('journals-by-discipline-elsevier/', views.journals_by_discipline_elsevier),
path('journals-by-discipline/chart-data/<str:discipline>/', views.journals_by_discipline_chart_data_elsevier),

每个块中的第一个路由是不同的(journals-by-discipline/ != journals-by-discipline-elsevier/)。但是第二个路由是相同的(都是journals-by-discipline/chart-data/<str:discipline>/)。

因此,路由journals-by-discipline/chart-data/<str:discipline>/将始终调用函数views.journals_by_discipline_chart_data。它永远不会到达第二次提到的路线。

您可以将第二个块中的第二个路由更改为journals-by-discipline-elsevier/chart-data/<str:discipline>/以保持一致。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64649442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档