Эй, ребята, как дела? Я создаю свое портфолио, и я хотел бы сделать это, используя Django, и теперь мне нужна помощь.
Я пытаюсь создать панель навигации с выпадающим списком, который содержит мои проекты, и это автоматически обновляется, когда я публикую sh новый проект. Теперь моя страница project_list уже делает это, и когда я на ней, навигационная панель работает так, как я хочу, но когда я на другой странице, она не показывает какой-либо проект.
Это моя модель:
from django.db import models
from django.urls import reverse
from django.contrib.auth import get_user_model
from django.utils import timezone
from django.contrib.auth.models import User
class Publish(models.Model):
user = models.ForeignKey(User,null=True, on_delete=models.CASCADE )
author = models.CharField(max_length=256, null= True)
name = models.CharField(max_length=256, null = True)
description = models.TextField()
create_date = models.DateTimeField(default=timezone.now)
def published(self):
self.create_date = timezone.now()
self.save()
Это мои views.py
from django.shortcuts import render,redirect, get_object_or_404
from django.views.generic import ListView, DeleteView, CreateView, TemplateView, UpdateView, DetailView
from django.contrib.auth.mixins import LoginRequiredMixin
from .forms import PublishCreateForm
from publish.models import Publish
from django.urls import reverse, reverse_lazy
from django.views.generic.detail import SingleObjectMixin
from django.utils import timezone
class NavItems(object):
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context.update({
'nav_items' : Publish.objects.all(),})
return context
class ResumeView(TemplateView,NavItems):
template_name = 'publish/resume.html'
class PublishListView(ListView):
model = Publish
def get_queryset(self):
qs = Publish.objects.filter(create_date__lte=timezone.now()).order_by('-create_date')
return qs
class PublishDetailView(NavItems,DetailView):
model = Publish
def get_queryset(self):
qs = Publish.objects.filter(create_date__lte=timezone.now()).order_by('-create_date')
return qs
class PublishCreateView(LoginRequiredMixin,CreateView):
login_url = '/login'
redirect_field_name = ''
form_class = PublishCreateForm
model = Publish
class PublishDeleteView(LoginRequiredMixin,DeleteView):
model = Publish
success_url = reverse_lazy('')
class PublishUpdateView(LoginRequiredMixin,UpdateView):
model = Publish
login_url = '/login'
form_class = PublishCreateForm
redirect_field_name = ''
моя навигационная панель:
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{% static 'publish/css/navbar.css' %}" type="text/css">
<title>Gabriel Asorey Portfolio</title>
</head>
<body>
<div class="sidenav">
<a href="{% url 'resume' %}">Resume</a>
<button class="dropdown-btn">Projetos
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-container">
<a href="{% url 'publish_list' %}">List</a>
{% for Publish in publish_list %}
<a href="{% url 'publish_detail' pk=Publish.pk%}">{{ Publish.name }}</a>
{% endfor %}
</div>
<a href="">Certificados</a>
{% if user.is_superuser%}
<a class="nav-item nav-link active" href="{% url 'publish_form' %}">Nova Publicação</a>
<a class="nav-item nav-link active" href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'admin:index' %}" class="nav-item nav-link active">Admin</a>
<a class="nav-link" href="https://www.linkedin.com/in/gabriel-asorey-45881156/"><i class="fab fa-linkedin-in fa-lg"></i></a>
<a class="nav-link" href="https://github.com/Gasorey"><i class="fab fa-github fa-lg" ></i></a>
{% endif %}
</div>
{% block content %}
{% endblock %}
<script src="{% static "publish/js/navbar.js" %}" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/js/bootstrap.min.js"></script>
</body>
</html>
таким образом навигационная панель работает, пока я на странице publish_list, но не работает ни при каких обстоятельствах. другая страница.
Если я изменю TemplateView и DetailView из ResumeView и PublishDetailView, чтобы передать ListView, он будет работать, но в PublishDetailView он не будет работать так, как мне нужно.
Кто-то может мне помочь, пожалуйста ? это проект на GitHub, если кто-то захочет что-то попробовать https://github.com/Gasorey/Portfolio-Django
Спасибо, ребята!