我不知道我以前没有这个论坛时过得如何:)请告诉我,我哪里出了问题?我在视图中创建了一个行为模型,创建了一个URL,但是当我单击标题时,它不会转到事件的详细描述。我在DetailViews中继承的内容会出错吗?我在下面附上代码
视图:
from django.shortcuts import get_object_or_404, render
from django.views.generic import DetailView
from django.views.generic.base import View
from .models import Blog, Event
# Create your views here.
class EventView(View):
def get(self, request):
events = Event.objects.all()
posts = Blog.objects.all()
return render(request, "home/home.html", {"events": events, "posts":posts})
class BlogDetailView (View):
def get(self, request, slug):
posts = Blog.objects.get(url=slug)
return render(request, "home/blog-detail.html", {"posts": posts})
class EventViewDetail(DetailView):
model = Event
template_name = "event/event-detail.html"
slug_field = "name"
URL:
from django.urls import path
from . import views
urlpatterns = [
path("", views.EventView.as_view()),
path("<slug:slug>/", views.BlogDetailView.as_view(), name="home_detail"),
path("event/<str:slug>/", views.EventViewDetail.as_view(), name="event_detail")
]
HTML:
<!-- Latest-Events-Sermons -->
<section class="section-padding latest_event_sermons m-0">
<div class="container">
<div class="row">
<div class="col-md-6 col-lg-5">
<div class="heading">
<h3>Анонс событий</h3>
<a href="#" class="btn btn-secondary btn-md pull-right">Показать все</a>
</div>
<div class="event_list">
<ul>
{% if events %}
{% for e in events %}
<li>
<div class="event_info">
<div class="event_date">
<span>{{ e.dataStart}}</span>
</div>
<h6><a href="{% url "event_detail" %}">{{ e.name }}</a></h6>
<ul>
<li><i class="fa fa-clock-o"></i>{{ e.dataStart }}</li>
<li><i class="fa fa-map-marker"></i> {{ e.adress}}</li>
</ul>
</div>
</li>
{% endfor %}
{% else %}
<p>У вас нет материала</p>
{% endif %}
</ul>
</div>
</div>
型号:
from django.db import models
from datetime import date
from django.urls import reverse
# Create your models here.
class Blog(models.Model):
"""Новости"""
name = models.CharField("Заголовок", max_length=100)
description = models.TextField("Описание")
descriptionTwo = models.TextField("Описание (второй абзац)", blank=True, default="")
blockquote = models.TextField("Цитата", blank=True, default="")
short = models.TextField("Краткое описание", max_length=300)
poster = models.ImageField("Изображение", upload_to="news/")
prewiew = models.ImageField("Превью", upload_to="news/")
dataPost = models.DateField("Дата публикации", default=date.today)
url = models.SlugField(max_length=160, unique=True, blank=True)
draft = models.BooleanField("Черновик", default=False)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("home_detail", kwargs={"slug": self.url})
class Meta:
verbose_name = "Новости"
verbose_name_plural = "Новости"
class Event(models.Model):
"""События"""
name = models.CharField("Заголовок", max_length=100)
adress = models.TextField("Адрес")
description = models.TextField("Описание")
short = models.TextField("Краткое описание")
phone = models.TextField("Контактный номер телефона")
email = models.EmailField()
image = models.ImageField("Изображение", upload_to="event/")
dataStart = models.DateField("Дата старта", default=date.today)
def __str__(self):
return self.name
class Meta:
verbose_name = "Событие"
verbose_name_plural = "События"
event_detail应该在您未传递的模板上收到一个参数条。所以你可以做这样的事情,
<h6><a href="{% url "event_detail" e.slug %}">{{ e.name }}</a></h6>
注意:您的子弹不能为空,在管理页面上注册模型时,您可以用event_name预先填充子弹。prepopulated_fields = {“ slug”:(“ event_name”,)}要么除了使用Slug,您还可以使用pk
<h6><a href="{% url "event_detail" e.pk %}">{{ e.name }}</a></h6>