Текущий путь не соответствует шаблонам url - Django
Я не могу заставить url перенаправить на один из шаблонов, определенных в файле маршрутизации url.
web.py
from django.urls import path
from django.contrib import admin
from heyurl import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='index'),
path('store', views.store, name='store'),
path('/metrics/', views.get_month_metrics, name= 'metrics'),
]
views.py (Включает функцию, которая вызывается вместе с включенными библиотеками)
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Url, Click
from django.core.validators import URLValidator, ValidationError
from heyurl.utils import db_services, helper
from django_user_agents.utils import get_user_agent
from django.template.defaulttags import register
from datetime import datetime
def get_month_metrics(request, url):
today = datetime.now()
ident = Url.objects.filter(short_url= url)
ident = ident[0].id
# GETTING THE CLICKS THIS MONTH
clicks_this_month = Click.objects.filter(url=ident, created_at__year=today.year,
created_at__month=today.month)
# TOTAL CLICKS PER BROWSER
safari = Click.objects.filter(url=ident, browser__contains='safari')
chrome = Click.objects.filter(url=ident, browser__contains='chrome')
firefox = Click.objects.filter(url=ident, browser__contains='firefox')
# TOTAL CLICKS PER PLATFORM
mobile = Click.objects.filter(url=ident, platform='Mobile')
pc = Click.objects.filter(url=ident, platform='PC')
#CONTEXT TO DISPLAY ON DATA PANEL
context = {
'url': url,
'clicks': len(clicks_this_month),
'safari': len(safari),
'chrome': len(chrome),
'firefox': len(firefox),
'mobile': len(mobile),
'pc': len(pc),
}
return render(request, 'heyurl/metrics.html', context)
Теперь я попробовал жесткое кодирование и поставил точный шаблон, который, по его словам, отсутствует, изменив web.py следующим образом
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name='index'),
path('store', views.store, name='store'),
path('RQvw4/metrics/', views.get_month_metrics, name= 'metrics'),
]
и это дает мне следующую ошибку
Удалите аргумент url
из get_month_metrics()
и получите доступ к url, используя request.path
. Это должно выглядеть следующим образом:
def get_month_metrics(request):
url = request.path
# rest of your code
Я думаю, что вы ожидаете получить RQvw4
как url
- поэтому вы должны определить путь с параметром <url>
как
path('<url>/metrics/', ...)
Затем следует сохранить url
в функции
def get_month_metrics(request, url):
EDIT:
Если вы жестко кодируете
path('RQvw4/metrics/',...)
то она не знает, что вы хотите присвоить RQvw4
значение url
.
Потребуется жестко закодировать это значение и в функции
def get_month_metrics(request, url="RQvw4"):
Но он все равно должен использовать path('<url>/metrics/', ...)
для других ссылок.