Django отображает url каждой категории в base.html
Я новичок в Django и создаю приложения для потокового видео, функции в основном заключаются в добавлении видео и отображении их на разных страницах по категориям. Я пытаюсь получить URL для каждой категории, чтобы отобразить ограниченное количество видео на каждой странице. Я могу отображать категории и ссылки на одной странице с помощью цикла for. Однако я хочу иметь эти URL на панели навигации в файле base.html.
.
videos/models.py
from tabnanny import verbose
from unicodedata import category
import uuid
from django.contrib.auth import get_user_model
from django.db import models
from django.conf import settings
class VideoCategory(models.Model):
name = models.CharField(choices=settings.CATEGORIES, max_length=45)
def __str__(self):
return self.name
class Meta:
verbose_name = 'カテゴリー'
verbose_name_plural = 'カテゴリー'
# Create your models here.
class VideoContent(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False,
unique=True,
)
title = models.CharField('タイトル', max_length=50)
comment = models.CharField('内容',max_length=500)
url = models.URLField('URL', max_length=200)
published_date = models.DateTimeField('投稿日', auto_now_add=True)
category = models.ForeignKey(
VideoCategory, verbose_name = 'カテゴリー',
on_delete=models.PROTECT, null=True, blank=True
)
def __str__(self):
return self.title
class Meta:
verbose_name = '動画投稿'
verbose_name_plural = '動画投稿'
video/views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from unicodedata import category
from django.shortcuts import render, get_object_or_404
from .models import VideoCategory, VideoContent
from django.urls import reverse_lazy, reverse
from django.shortcuts import render
from django.views.generic import (
ListView,
CreateView,
UpdateView,
DeleteView,
)
from .forms import VideoPostForm
class VideoCreateView(LoginRequiredMixin ,CreateView):
template_name = 'video/videoAdd.html'
success_url= '/video/'
model = VideoContent
form_class = VideoPostForm
login_url = 'login'
class VideoListView(LoginRequiredMixin, ListView):
model = VideoContent
template_name = "video/videoView.html"
context_object_name = 'video'
login_url = 'login'
def get_queryset(self):
queryset =VideoContent.objects.filter(category_id=1)
return queryset
class CategoryView(LoginRequiredMixin, ListView):
model = VideoContent
template_name = 'video/videoView.html'
login_url = 'login'
def get_queryset(self):
category = VideoCategory.objects.get(name=self.kwargs['category'])
queryset = VideoContent.objects.filter(category=category)
return queryset
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["category_key"] = self.kwargs['category']
return context
class VideoDeleteView(LoginRequiredMixin, DeleteView):
model = VideoContent
template_name = 'video/video_delete_confirmation.html'
success_url = reverse_lazy('video:videoView')
login_url = 'login'
class VideoUpdate(LoginRequiredMixin, UpdateView):
template_name = 'video/video_update_form.html'
model = VideoContent
fields = ['title', 'comment', 'url', 'category']
success_url = reverse_lazy('video:videoView')
login_url = 'login'
video/urls.py
from django.urls import path
from .views import VideoListView, VideoDeleteView,VideoUpdate, VideoCreateView
app_name='video'
urlpatterns = [
path('', VideoCreateView.as_view(), name='videoAdd'),
path('videoView', VideoListView.as_view(), name='videoView'),
path('<slug:pk>/delete/', VideoDeleteView.as_view(), name='delete'),
path('<slug:pk>/update/', VideoUpdate.as_view(), name='update'),
]
templates/_base.html
<!-- Nav Item - Utilities Collapse Menu -->
<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseFx"
aria-expanded="true" aria-controls="collapseUtilities">
<i class="fas fa-fw fa-wrench"></i>
<span>外為市場</span>
</a>
<div id="collapseFx" class="collapse" aria-labelledby="headingTwo"
data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item" href="{% url 'video:videoView' category_id=1 %}" id ="diplayKey">Business-Basic</a>
<a class="collapse-item" href="{% url 'video:videoView' %}">Business-Advance</a>
</div>
</div>
</li>