У меня проблемы с изменением пути URL в Django. Я работаю над уроком здесь . Я пытаюсь получить URL-адрес для go fencing / "armsText", чтобы URL-адрес основывался на атрибутеcraftText, а не на идентификаторе. Пока я могу заставить его работать только с идентификатором. Мои текущие версии выглядят так:
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.template import loader
from .models import Weapons
def index(request):
latest_weapons_list = Weapons.objects.order_by('-beginDate')[:5]
#template=loader.get_template('fencing/index.html')
context={
'latest_weapons_list':latest_weapons_list,
}
return render(request,'fencing/index.html',context)#template.render(context,request))
# Create your views here.
def detail(request, weapons_id):
#weapon=get_object_or_404(Weapons, pk=weapons_id)
weapon=get_object_or_404(Weapons, pk=weapons_id)
return render(request,'fencing/detail.html',{'weapon':weapon})
Мои URL выглядят так:
from django.urls import path
from . import views
urlpatterns = [
path('',views.index,name='index'),
path('<int:weapons_id>/',views.detail,name='detail'),
path('<str:weapons.weaponText>',views.index,name='index'),
]
Модель выглядит следующим образом:
from django.db import models
class Weapons(models.Model):
weaponText=models.CharField(max_length=200)
beginDate=models.IntegerField(default=0)
endDate=models.IntegerField(default=0)
link=models.CharField(max_length=200)
def __str__(self):
return self.weaponText
Код страницы сайта
{% if latest_weapons_list %}
<ul>
{% for Weapons in latest_weapons_list %}
<li><a href="/fencing/{{Weapons.weaponText}}/">{{ Weapons.weaponText }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No weapons are available.</p>
{% endif %}
В настоящее время я получаю сообщение об ошибке 404, в котором говорится следующее:
Using the URLconf defined in NBreport.urls, Django tried these URL patterns, in this order:
fencing/ [name='index']
fencing/ <int:weapons_id>/ [name='detail']
fencing/ <str:weapon.weaponText> [name='index']
The current path, fencing/Rapier/, didn't match any of these.
Спасибо за помощь.