У меня есть веб-сайт звукозаписывающей компании, который я создаю, и я хочу заполнить раскрывающийся список на панели навигации исполнителями из объекта Artst Artist.objects.all ().
Я работаю в одном приложении "musi *" 1033 * "но только когда я добавляю" / artistlist / "в конец. Любой другой URL-адрес не заполняет список.
Я хочу, чтобы список всегда присутствовал как элемент панели навигации. На данный момент я пытаюсь заставить работать context_processors.py. YouTube-учебник, за которым я следую по точно такой же проблеме
Мне нужна помощь, так как я явно делаю что-то глупое или что-то упустил из виду c. На всех остальных URL-адресах это вызывает еще одно: «В настоящее время у нас еще нет художников ...».
Надеюсь, это имеет смысл для кого-то. Приветствуется любая помощь.
base. html
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<div class="dropdown-item" href="#">
{% if all_artists %}
<ul>
{% for artist in all_artists %}
<li class="dropdown-item">
<a href="{% url 'music:artist' artist.id %}">
<img src="{{ artist.artist_logo.url }}" style="width: 100px"><br>
{{ artist.artist_name }}<br>
{{ artist.artist_url }}<br>
</a>
</li>
{% endfor %}
</ul>
{% else %}
<h3>We currently dont have any artists yet..</h3>
{% endif %}
</div>
</div>
main urls.py
from django.contrib import admin
from django.urls import include, path, re_path
from django.conf import settings
from . import views
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
# include urls from the music app
path('music/', include('music.urls', namespace='music')),
# path('', include('music.urls', namespace='home')),
path('', include('blog.urls', namespace='blog')),
# path('single', include('blog.urls', namespace='single')),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
music / models.py
from django.db import models
# Create your models here.
class Artist(models.Model):
artist_name = models.CharField(max_length=250, default='')
artist_logo = models.FileField()
artist_url = models.URLField(blank=True)
def __str__(self):
return self.artist_name
class Release(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
release_title = models.CharField(max_length=500)
release_cover = models.FileField()
release_duration = models.IntegerField()
def __str__(self):
return self.release_title
class Track(models.Model):
release = models.ForeignKey(Release, default='', on_delete=models.CASCADE)
artist = models.ForeignKey(Artist, default='', on_delete=models.CASCADE)
track_title = models.CharField(max_length=200)
track_version = models.CharField(max_length=200)
track_genre = models.CharField(max_length=100)
track_duration = models.IntegerField()
track_number = models.SmallIntegerField()
class Meta:
ordering = ["track_number"]
def __str__(self):
return self.track_title
app_name = 'music'
music / urls.py
from django.contrib import admin
from django.urls import path, include, re_path
from . import views
# from blog.views import newsfeed, single
urlpatterns = [
# no info past music return index EG /music/
path('', views.IndexView.as_view(), name='index'),
# re_path(r'^$', views.IndexView.as_view(), name='index'),
# Releases
# albums/releases
re_path(r'^release/$', views.ReleaseView.as_view(), name='release'),
# looking for music page with album id afterwards /music/1
re_path(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name="detail"),
# Artists
re_path(r'^artistlist.html$', views.ArtistListView.as_view(), name='artistlist'),
re_path(r'^(?P<pk>[0-9]+)/$', views.ArtistView.as_view(), name="artist"),
# Register
# register url
re_path(r'^register/$', views.UserFormView.as_view(), name="register"),
]
# defined the app name in case the same fields are used in other apps
app_name = 'music'
music / context_processors.py
from .models import Artist
def all_artists(request):
artist = Artist.objects.all()
return {'artist':artist}
Я нашел этот vieo, который является точно такой же проблемой, и попытался настроить процессор контекста на te выше, а также пробовал только что:
from music.models import Artist:
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'music.context_processors.all_artists',
],
},
},
]