/ Basketball /处的NoReverseMatch反向,找不到带有参数'(',)'的'detail'。尝试了1个模式:

问题描述 投票:0回答:1

我有一个Django应用,用户可以在其中使用Basketball模型创建Basketball对象,并将其发布到ListView子类的feed中。然后,我希望其他用户能够通过单击对象的超链接来访问该帖子的详细信息。

问题是,当我将详细信息页面的url设置为包含变量“ slug”作为对象slug时,它将用url路由“”覆盖我的列表页面,如篮球/urls.py所示,而不是路由到列表页面,它说找不到带有空子弹的页面。这不允许我进入网址“ http://127.0.0.1:8000/basketball/

我的工作印象是Django依次搜索url路由,因此由于空路径是第一个路径,因此应该在包含该段的路径之前看到它。

请注意直接导致该问题的代码段在Basketball_list.html中:

<a href= "{% url 'basketball:detail' basketball.slug %}">

删除此代码后,我可以访问“ http://127.0.0.1:8000/basketball/”,但超链接不存在,因此无法达到目的。

请注意,我正在使用:Python == 3.8.3Django == 3.0.6

models.py:

from django.db import models

from django.db import models
from django.urls import reverse
from django.conf import settings
from django.utils.text import slugify

from autoslug import AutoSlugField
from model_utils.models import TimeStampedModel

from nba_api.stats.static import players

PLAYER_CHOICES = [(i['full_name'], i['full_name']) for i in players.get_active_players()]

class Basketball(TimeStampedModel):
    player = models.CharField(max_length = 50, choices = PLAYER_CHOICES, default = None)
    slug = AutoSlugField("Basketball Player", unique = True, populate_from ="player")
    creator = models.ForeignKey(settings.AUTH_USER_MODEL,
    null = True,
    on_delete = models.SET_NULL
    )

    def get_absolute_url(self):
        return reverse(
        'basketball:detail', kwargs={'slug': self.slug}
        )

    def __str__(self):
        return f"{self.creator} posted about: {self.player}"

views.py:

from django.shortcuts import render
from django.views.generic import ListView, CreateView, DetailView
from django.contrib.auth.mixins import LoginRequiredMixin

from .models import Basketball

class BasketballListView(LoginRequiredMixin, ListView):
    model = Basketball


class BasketballDetailView(DetailView):
    model = Basketball

class BasketballCreateView(LoginRequiredMixin, CreateView):
    model = Basketball
    fields = [
    'player',
    ]

    def form_valid(self, form):
        form.instance.creator =self.request.user
        return super().form_valid(form)

urls.py:

# wtg/basketball/urls.py
from django.urls import path
from . import views


app_name = "basketball"
urlpatterns = [
    path(
    route='',
    view=views.BasketballListView.as_view(),
    name='list',
    ),
    path(
    route='add/',
    view=views.BasketballCreateView.as_view(),
    name='add',
    ),
    path(
    route='<slug:slug>/',
    view=views.BasketballDetailView.as_view(),
    name='detail'
    ),
]

basketball_list.html:

{% extends 'base.html' %}

{% block title %}Basketball List{% endblock title %}

{% block content %}
  <h2>Basketball List</h2>

<ul>
  {% for x in basketball_list %}
    <li><a href= "{% url 'basketball:detail' basketball.slug %}">{{ x }}</a></li>

  {% endfor %}
</ul>

<hr/>
<p>Post Own Info?</p>
  <p>
    <a class="btn btn-primary"
      href="{% url 'basketball:add' %}" role="button">
      Add Post
    </a>
</p>
{% endblock content %}

基本urls.py:

urlpatterns = [
    path(
        "",
        TemplateView.as_view(template_name="pages/home.html"),
        name="home",
    ),
    path(
        "about/",
        TemplateView.as_view(template_name="pages/about.html"),
        name="about",
    ),
    # Django Admin, use {% url 'admin:index' %}
    path(settings.ADMIN_URL, admin.site.urls),
    # User management
    path(
        "users/",
        include("wtg.users.urls", namespace="users"),
    ),
    path("accounts/", include("allauth.urls")),
    # Your stuff: custom urls includes go here
    path(
    'basketball/',
    include('wtg.basketball.urls', namespace='basketball')
    ),
    path(
    "^activity/",
    include("actstream.urls")
    ),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
python django django-3.0
1个回答
1
投票

您的网址与Basketball_list循环变量(x)不匹配。这个

{% for x in basketball_list %}
  <li><a href= "{% url 'basketball:detail' basketball.slug %}">{{ x }}</a></li>
{% endfor %}

应该是

{% for x in basketball_list %}
  <li><a href= "{% url 'basketball:detail' x.slug %}">{{ x }}</a></li>
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.