簡體   English   中英

如何在 Django model 中返回單個 object 並查看

[英]How to return single object in a Django model and view

我想從 model 返回一個非常基本的單段,但我不知道如何或哪個是最好的方法。 這是一個簡單的描述文本字段(maindescription),我希望將來能夠更改,而不是對其進行硬編碼。 它必須是簡單的方法,但我只能找到一個很好的例子。 對於如何正確編寫視圖並在模板中檢索它的任何幫助,我們將不勝感激。

model.py

from autoslug import AutoSlugField
from model_utils.models import TimeStampedModel
from time import strftime, gmtime
# Receive the pre_delete signal and delete the file associated with the model instance.
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver

class Song(models.Model):
    author = models.CharField("Author", max_length=255) 
    song_name = models.CharField("Song Name", max_length=255)
    slug = AutoSlugField("Soundtrack", unique=True, always_update=False, populate_from="song_name")
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now=True)
    audio_file = models.FileField(upload_to='mp3s/', blank=True)

    def __str__(self):
        return self.song_name

class MainDescription(models.Model):    
    main_description = models.TextField()
    slug = AutoSlugField("Main Description", unique=True, always_update=False, populate_from="main_description")
    
    def __str__(self):
        return self.main_description

視圖.py

from django.views.generic import ListView, DetailView
from .models import Song, MainDescription

class SongListView(ListView):
    model = Song

# Overwrite the default get_context_data function
def get_context_data(self, **kwargs):
    # Call the base implementation first to get a context
    context = super().get_context_data(**kwargs)
    # Add extra information here, like the first MainDescription Object
    context['main_description'] = MainDescription.objects.first()
    return context

管理員.py

from django.contrib import admin
from .models import Song, MainDescription

admin.site.register(Song)
admin.site.register(MainDescription)

網址.py

from django.urls import path
from . import views

app_name = "music"
urlpatterns = [
    path(
        route='',
        view=views.SongListView.as_view(),
        name='list'
    ),
]

song_list.html

{% extends 'base.html' %}

{% block content %}
<div class="container">
<p>{{ main_description.main_description }}</p>
</div>
<ul class="playlist show" id="playlist">
{% for song in song_list %}
    <li audioURL="{{ song.audio_file.url }}" artist="{{ song.author }}"> {{ song.song_name }}</li>  
{% endfor %}
</ul> 
{% endblock content %}
</div>

看起來您正在嘗試向 SongListView 添加額外的上下文

class SongListView(ListView):

   model = Song

   # Overwrite the default get_context_data function
   def get_context_data(self, **kwargs):
       # Call the base implementation first to get a context
       context = super().get_context_data(**kwargs)
       # Add extra information here, like the first MainDescription Object
       context['main_description'] = MainDescription.objects.first()
       return context

然后在你的模板中你可以做這樣的事情

<p>{{ main_description.main_description }}</p>

有關文檔的更多信息,您可以在此處找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM