django установить URL-адрес для атрибута класса - PullRequest
0 голосов
/ 13 января 2020

У меня проблемы с изменением пути 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.

Спасибо за помощь.

...