Все таки решил эту проблему. Я скопировал vievs и url-адреса кода события из блога для этого события. Но это не сработало, так как URL-адрес совпадает, и я просто дал всем свой URL-адрес в каталоге 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})
Urls:
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 -->