【问题标题】:Tell me correctly to display a detailed description正确告诉我以显示详细说明
【发布时间】:2020-08-25 07:33:18
【问题描述】:

我不知道以前没有这个论坛我是怎么生活的 :) 请告诉我,我哪里出错了?我在视图中创建了一个行为模型,创建了一个 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"

网址:

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 = "События"

【问题讨论】:

  • 它会报错吗,你到底在哪里点击?我在您的链接上看到
  • 转换应该发生在这个元素上
    {{ e.name }}

标签: python html django url view


【解决方案1】:

event_detail 应该在您没有传递的模板上接收一个参数 slug。 所以你可以做这样的事情,

<h6><a href="{% url "event_detail" e.slug %}">{{ e.name }}</a></h6>

注意:您的 slug 不能为空,您可以在管理页面上注册模型时使用 event_name 预填充 slug,即 prepopulated_fields = {"slug": ("event_name",)} 要么 与其使用 slug,不如使用 pk

<h6><a href="{% url "event_detail" e.pk %}">{{ e.name }}</a></h6>

我希望这会有所帮助。

【讨论】:

  • 给出了一个错误:django.urls.exceptions.NoReverseMatch: Reverse for 'event_detail' with arguments '('',)' not found.尝试了 1 种模式:['event/(?P[^/]+)/$'] 他在这里缺少什么参数
  • 它将一个空的 slug 传递给 event_detail URL。确保 event.slug 不为空。您可以从管理员或视图预填充 slug。我也更新了我的答案。注意:我不知道你的模型,所以我可能不知道正确的字段名称,请在适当的地方进行替换。
  • TypeError: get () got an unexpected keyword argument 'slug' 引发此错误。我编辑了帖子并添加了模型文件。我打算通过header过渡到详细的描述,但是如果你在Event模型中添加了一个url字段,并且已经将url传递给slug,你说呢
【解决方案2】:

同样,我解决了这个问题。我从博客中复制了该事件的事件代码 vievs 和 url。但它并没有那样工作,因为 url 匹配,我只是在 urls 目录中给了每个人我的 url。这是解决方案代码。

非常重要的一点是,通过单击主页上的活动标题来打开。 get_absolute_url函数负责链接的地址,在models.py中找到函数。

观看次数:

from django.shortcuts import get_object_or_404, render
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(View):
    def get(self, request, slug):
        events = Event.objects.get(url=slug)
        return render(request, "event/event-detail.html", {"events": events})

网址:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.EventView.as_view()),
    path("news/<slug:slug>/", views.BlogDetailView.as_view(), name="home_detail"),
    path("event/<slug:slug>/", views.EventViewDetail.as_view(), name="event_detail"),
]

型号:

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)
    url = models.SlugField(max_length=160, blank=True)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("event_detail", kwargs={"slug": self.url})


    class Meta:
        verbose_name = "Событие"
        verbose_name_plural = "События"

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="{{ e.get_absolute_url }}">{{ 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>

HTML 事件页面(块“内容”)

<section class="post_detail section-padding">
    <div class="container">
        <div class="row">
            <div class="col-md-8">
                <div class="post_img">
                    <img src="assets/images/events_detail.jpg" alt="image">
                    <div class="event_timer">
                        <div class="date">
                            <span>20</span>
                            Aug, 19
                        </div>
                        <div class="timer">
                            <div id="countdown"></div>
                        </div>
                    </div>
                </div>
                <h2>{{ events.name }}</h2>
                <div class="post_meta">
                    <ul>
                        <li><i class="fa fa-clock-o"></i> {{ event.dataStart }}</li>
                        <li><i class="fa fa-map-marker"></i> {{ event.adress }}t</li>
                    </ul>
                </div>
                <p>{{ events.description }}</p>
                <div class="row">
                    <div class="col-lg-7">
                        <ul>
                            <li><i class="fa fa-check-circle"></i> Internet tend to repeat predefined chunks.</li>
                            <li><i class="fa fa-check-circle"></i> Contrary to popular belief, Lorem Ipsum is not simply
                            </li>
                            <li><i class="fa fa-check-circle"></i> On the other hand, we denounce with righteous</li>
                            <li><i class="fa fa-check-circle"></i> In a free hour, when our power of choice is
                                untrammelled
                            </li>
                            <li><i class="fa fa-check-circle"></i> But in certain circumstances and owing.</li>
                        </ul>
                    </div>
                    <div class="col-lg-5">
                        <div class="venu_map">
                            <iframe
                                    src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d7060970.521913474!2d-102.60272453381052!3d37.588245893295074!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x54eab584e432360b%3A0x1c3bb99243deb742!2sUnited+States!5e0!3m2!1sen!2sin!4v1495005824042"
                                    style="border:0" allowfullscreen></iframe>
                        </div>
                    </div>
                </div>
                <br>
                <a href="#" class="btn btn-primary"><i class="fa fa-plus"></i> Google Cal</a>
                <a href="#" class="btn btn-primary"><i class="fa fa-plus"></i> ICAL EXPORT</a>
                <br><br>
                <!-- Share -->
                <div class="tags_share">
                    <div class="psot_share border-0">
                        <span><strong>Share:</strong></span>
                        <a href="#"><i class="fa fa-facebook"></i></a>
                        <a href="#"><i class="fa fa-twitter"></i></a>
                        <a href="#"><i class="fa fa-google-plus"></i></a>
                        <a href="#"><i class="fa fa-linkedin"></i></a>
                    </div>
                </div>

                <!-- Comments -->
                <div id="comments">
                    <div class="all_comments">
                        <h4>2 Comments</h4>
                        <ul class="commentlist">
                            <li class="comment">
                                <div class="comment the-comment">
                                    <div class="comment-avatar">
                                        <img alt="image" src="assets/images/member_1.jpg" class="avatar">
                                    </div>
                                    <div class="comment-content">
                                        <div class="comment-meta">
                                            <span class="comment-author"> <a href="#" class="url">Groot Will</a></span>
                                            <span class="comment-time">/ <span> 15 May, 2018</span></span>
                                        </div>
                                        <div class="text">
                                            <div class="comment-text">
                                                <p>That far ground rat pure from newt far panther crane lorikeet overlay
                                                    alas cobra across much
                                                    gosh less goldfinch ruthlessly alas examined and that more and the
                                                    ouch jeez.</p>
                                                <span class="reply"> <a rel="nofollow" class="comment-reply-link"
                                                                        href="#"><i
                                                        class="fa fa-comments"></i> Reply</a> </span>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <ol>
                                    <li class="comment">
                                        <div class="comment the-comment">
                                            <div class="comment-avatar">
                                                <img alt="image" src="assets/images/member_1.jpg" class="avatar">
                                            </div>
                                            <div class="comment-content">
                                                <div class="comment-meta">
                                                    <span class="comment-author"> <a href="#" class="url">Groot Will</a></span>
                                                    <span class="comment-time">/ <span> 15 May, 2018</span></span>
                                                </div>
                                                <div class="text">
                                                    <div class="comment-text">
                                                        <p>That far ground rat pure from newt far panther crane lorikeet
                                                            overlay alas cobra across much
                                                            gosh less goldfinch ruthlessly alas examined and that more
                                                            and the ouch jeez.</p>
                                                        <span class="reply"> <a rel="nofollow"
                                                                                class="comment-reply-link" href="#"><i
                                                                class="fa fa-comments"></i> Reply</a> </span>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </li>
                                </ol>
                            </li>
                        </ul>
                    </div>
                    <!-- /all-comment -->

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    相关资源
    最近更新 更多