Как создать выпадающий Navbar, который автоматически обновляется (Django) - PullRequest
0 голосов
/ 03 апреля 2020

Эй, ребята, как дела? Я создаю свое портфолио, и я хотел бы сделать это, используя 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

Спасибо, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...