gpt4 book ai didi

django - Django 中的自定义 url 模式

转载 作者:行者123 更新时间:2023-12-02 06:51:27 25 4
gpt4 key购买 nike

我正在尝试构建一个供个人使用的网站,它拥有两个 ID,一个用于 session (比赛举办地),另一个用于事件(比赛号码)。事件 ID 的形式为“123456_01”,并作为事件模型的主键传递到模型中,如下所示...

class Event(models.Model):
meeting = models.CharField(max_length=500)
meetingID = models.ForeignKey(Meeting, on_delete='CASCADE', related_name='races')
eventID = models.CharField(max_length=300, primary_key=True)
venue = models.CharField(max_length=600, null=True)
race_no = models.CharField(max_length=2)
event_time = models.TimeField()
status = models.CharField(max_length=100)
distance = models.CharField(max_length=600)

我目前的 View 文件设置如下:

class EventDetailView(DetailView,LoginRequiredMixin):
context_object_name = 'race_detail'
template_name = 'event.html'
model = models.Event
slug_url_kwarg = 'eventID'

我还设置了前端,以便目前当我单击某个比赛时,它会自动导航到带有链接 http://127.0.0.1:8000/app/123456_01/ 的页面,以便该部分通过 HTML 中的此配置进行工作:

{% url 'bettingUI:race' eventID=events.eventID %}

我遇到的问题似乎与 urls.py 文件的配置有关,并且可能是views.py 文件中我缺少的东西。

我的 urls.py 文件设置如下:

from django.urls import path, include
from . import views

app_name = 'bettingUI'

urlpatterns = [
path('',views.DashListView.as_view(),name='dashboard'),
path('<eventID>/', views.EventDetailView.as_view(), name='race'),

]

通过阅读文档,我认为我需要使用 slug,因为我传入的 ID 中存在“_”字符,但我在浏览器中不断收到错误消息,指出它无法解析关键字“slug”进入现场。选项包括:dro_eventID、dro_meetingID、dro_meetingID_id、event_time、 session 、race_no、运行者、状态、地点(**模型的字段)。如果我将 urls.py 文件更改为以下内容,我会收到相同的错误:

   path('<slug:eventID>/', views.EventDetailView.as_view(), name='race'),

我在这里有点迷失,所以希望得到一些指导。

谢谢。

<小时/>

我算了,答案是输入<slug:pk>

但现在我的仪表板页面出现错误(我点击进入比赛页面的页面):

NoReverseMatch at /app/
Reverse for 'race' with keyword arguments '{'eventID': '1216859_01'}' not found. 1 pattern(s) tried: ['app/(?P<pk>[-a-zA-Z0-9_]+)/$']

最佳答案

所以我现在再次给出工作版本:

首先,您应该向您的事件模型添加一个 slug 字段,这将允许您使用 slug,因此您的模型将如下所示:

from django.utils.text import slugify

class Event(models.Model):
meeting = models.CharField(max_length=500)
meetingID = models.ForeignKey(Meeting, on_delete='CASCADE', related_name='races')
eventID = models.CharField(max_length=300, primary_key=True)
venue = models.CharField(max_length=600, null=True)
race_no = models.CharField(max_length=2)
event_time = models.TimeField(null=True)
status = models.CharField(max_length=100, null=True)
distance = models.CharField(max_length=600, null=True)
slug = models.SlugField(max_length=50, null=True)

def save(self, *args, **kwargs):
self.slug = slugify(self.eventID, allow_unicode=True)
return super(Event, self).save(*args, **kwargs)

注意 save() 函数,我们添加了一个 slugify() 方法来在事件保存时对 eventID 字段进行 slugify。

那么您的 View 应该如下所示:

from .models import Event, Meeting

class EventList(ListView):
model = Event
template_name = 'event_list.html'
context_object_name = 'race_list'

class EventDetailView(DetailView,LoginRequiredMixin):
context_object_name = 'race_detail'
template_name = 'myusers1/event.html' # this could be only event.html if the template is in yourapp/templates/ folder directly
model = Event
slug_url_kwarg = 'slug'

请注意,在上面的 View 中,我们现在实际上使用默认的 slug 定义。

我将 listview url 放在 races/ 子 url 下,但您可以将其放在任何您想要的位置。在您的 urls.py 中,您现在可以正确使用 slug 值,例如:

path('races/<slug:slug>/', views.EventDetailView.as_view(), name='race'),
path('races/', views.EventList.as_view(), name='race_list'),

在我的试用应用程序中,模板如下所示:listview 模板:

{% extends 'myusers1/base.html' %}

{% block content %}

<div class"container">
<div class="col col-lg-2">
<h2>Races</h2>
<ul>
{% for race in race_list %}
<div class="col-xs-12 .col-md-8"><li><a href="{% url 'Myusers1:race' slug=race.slug %}"> {{ race.venue }} </a> </li></div>
{% endfor %}
</ul>
</div>
</div>

{% endblock %}

详细模板如下所示:

{% extends 'myusers1/base.html' %}

{% block content %}

<div class"container">
<div class="col col-lg-2">

<h2>Race Details</h2>

<div class="col-xs-12 .col-md-8"> <h4>Venue name: </h4> {{ race_detail.venue}} </div>
<div class="col-xs-12 .col-md-8"> <h4>Event ID: </h4> {{ race_detail.eventID }} </div>
<div class="col-xs-12 .col-md-8"> <h4>Meeting name: </h4> {{ race_detail.meeting }} </div>
<div class="col-xs-12 .col-md-8"> <h4>Meeting ID: </h4> {{ race_detail.meetingID.id }} </div>

</div>
</div>

{% endblock %}

以及关于动态 url 如何使用上述内容工作的可视化结果:

enter image description here

我希望上述内容能够帮助您现在完成应用程序列表和详细信息 View 。干杯。

关于django - Django 中的自定义 url 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com