【问题标题】:Could not parse the remainder: '(song)' from 'playlist.songs.add(song)'无法解析剩余部分:来自“playlist.songs.add(song)”的“(song)”
【发布时间】:2017-09-11 11:24:17
【问题描述】:

这是我的播放列表和歌曲模型:

models.py

class Song(models.Model):
    song_title = models.CharField(max_length=200, null=False, blank=False)
    def __str__(self):
        return self.song_title
class Playlist(models.Model):
    name = models.CharField(max_length=200, null=False, blank=False,default='')
    songs = models.ManyToManyField('Song')

    def __str__(self):
        return self.name
    @property
    def playlist_id(self):
        return self.id

这是我的模板:

    <div class="dropdown">
    <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Add to playlist<span class="caret"></span></button>
    <ul class="dropdown-menu">
    {% for playlist in all_playlists %}
    <li><button onclick="{{playlist.songs.add(song)}}">{{playlist.name}}</button></li>
    {% endfor %}
    </ul>
</div>

当用户单击“添加到播放列表”下拉按钮时,它会显示播放列表的下拉列表。但我想要的是当用户点击播放列表时,歌曲应该被添加到播放列表的歌曲字段中。为此,我创建了一个带有 action = playlists.songs.add(song) 的按钮。当我渲染它时,它返回了这个错误:

无法解析剩余部分:“(歌曲)”来自 'playlist.songs.add(song)'

所以我启动了 django shell,然后输入了同样的内容,它在 shell 中有效,但在模板中无效。这是我的 shell 日志。

In [1]: from music.models import Song, Playlist

In [2]: s = Song.objects.get(pk=2)

In [3]: p1 = Playlist.objects.get(pk=2)

In [4]: p1.songs.add(s)

In [5]: p1.songs.all()
Out[5]: [<Song: Shape of you>]

非常感谢您的帮助。

【问题讨论】:

  • onclick 事件编写的代码将在客户端调用,您无法在浏览器中执行python。您可以编写 javascript 向服务器发送 HTTP 请求以将歌曲添加到播放列表,也可以使用 django 表单。
  • 我如何在 django 中做到这一点?

标签: python html django button


【解决方案1】:

这是解决方案之一。

  1. 创建一个 django form 并带有适当的字段以进行多项选择。使用POST 方法将其插入到您的模板标签中。

  2. 创建一个 url 和视图来处理这个POST 请求。您可以编写代码以在此视图中将歌曲添加到播放列表。然后重新渲染您的模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2020-10-10
    • 2021-04-15
    相关资源
    最近更新 更多