Reputation: 1509
I have a python django application. I had a view, which I duplicated and changed slightly to create a second view. But they seem to be hooked together and duplicate the page content, when they should be different.
Here is my urls.py
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),
]
I have two views, journals_by_discipline and journals_by_discipline_elsevier
Here is my views.py
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())
In my attempt to create the second view (journals by discipline elsevier), I duplicated the logic used to create the first view. But the result is both pages are the same.
In my Data() class, I have two methods: journals_by_discipline_chart_data
and journals_by_discipline_chart_data_elsevier
which are similar but not the same. I am trying to call these differently in my views.py
file, but it is not working as it should.
How do I unhook these two views?
Upvotes: 0
Views: 44
Reputation: 12548
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),
The first route in each block is different (journals-by-discipline/
!= journals-by-discipline-elsevier/
). But the second route is the same (both journals-by-discipline/chart-data/<str:discipline>/
).
So the route journals-by-discipline/chart-data/<str:discipline>/
will always call the function views.journals_by_discipline_chart_data
. It will never reach the second time the route is mentioned.
You could change the second route in the second block to journals-by-discipline-elsevier/chart-data/<str:discipline>/
to be consistant.
Upvotes: 2