首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的URL conf问题

问Django中的URL conf问题
EN

Stack Overflow用户
提问于 2016-11-02 11:49:41
回答 2查看 69关注 0票数 0

因此,我正在进行一个项目,该项目显示一个特定艺人从数据库中发布的标题、歌曲和专辑。我有点卡住了。当您单击相册链接时,我正在尝试创建一个显示专辑中歌曲的页面。当点击链接时,我希望URL显示艺人的名字和相册的标题,但是我总是收到同样的错误。它将相册的名称与艺人的名称匹配。

如何使页面显示相册中的歌曲。

​

​

这是视图的代码

代码语言:javascript
复制
 def home(request):
    artistes = Artiste.objects.all()
    return render(request, 'music/home.html', locals())


 def details(request, artiste):
    artistes = get_object_or_404(Artiste, name=artiste)
    album = Artiste.objects.get(name=artiste).album_set.all()
    single = Artiste.objects.get(name=artiste).song_set.filter(single=True)
    return render(request, 'music/details.html', {'artistes': artistes, 'single': single, 'album':album})


def album_details(request,name,album):
    albums = get_object_or_404(Album, title=album)
    artistes = get_object_or_404(Artiste, name=name)
    single = Album.objects.get(title=album).song_set.filter(single=False)
     return render(request, 'music/album_detail.html', {'albums': albums, 'single': single})

url模式

代码语言:javascript
复制
app_name = 'music'

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^(?P<artiste>.+)/$', views.details, name='details'),
    url(r'^(?P<name>.+)/(?P<album>.+)/$', views.album_details, name='album_details')
]

相册详细资料页

代码语言:javascript
复制
<body>
    {% if artistes.album_set.all %}
        {% for songs in album %}
            <h4>Albums</h4>
            <!--<img src="{{album.art}}"><br>
            -->
            <a href="{% url 'music:album_details' songs.artiste songs.title %}">{{songs.title}}</a>
            <h5>{{songs.artiste}}</h5>
            <h5>{{songs.title}}</h5>
        {% endfor %}
    {% else %}
         <h3>No albums available</h3>
         <h5>Check Out Songs </h5>
        <ul>
        {% for song in artistes.song_set.all %}
            <li>{{song}} - mp3</li>
        {% endfor %}
         </ul>
    {% endif %}


</body>
</html>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-02 11:55:59

你的URL太普通了。.+匹配所有内容,包括"Wizked/Starboy“之类的内容,您想要被album_details URL捕获。

你可以通过改变这些网址模式的顺序来解决这个问题,但是你也应该减少它们的通用性--比如r'^(?P<artiste>\w+)等等。

票数 0
EN

Stack Overflow用户

发布于 2016-11-02 12:56:13

代码看起来没问题。是个合乎逻辑的问题。

错误是:没有任何处理此查询的人员。

在url中,匹配的url是:

?P<(r‘^( >.+)/$',views.details,name='details'),

为什么?与".+“匹配一切,包括”魔法师/星际男孩“。

当您到达此代码时:

代码语言:javascript
复制
 albums = get_object_or_404(Album, title=album)

相册等于“魔法师/星际男孩”

该查询引发404,因为没有找到任何项。

如果您在url中更改".+“和"\w+”,就像丹尼尔说的那样:

url(r'^(?P< name>.+)/(?P< album>.+)/$',views.album_details,name=‘相册_details’)

然后帕拉姆将是:

名字=魔法师

专辑= Starboy

然后执行代码:

代码语言:javascript
复制
albums = get_object_or_404(Album, title=album)
artistes = get_object_or_404(Artiste, name=name)

如果数据库中有带有此名称的专辑和艺术家的记录,则会显示该页。不是你还有404。

我建议您至少将专辑查询更改为:

代码语言:javascript
复制
albums = Album.objects.filter(title=album)

在html中,可以这样做:

代码语言:javascript
复制
    {% for songs in album %}
            <h4>Albums</h4>
            <!--<img src="{{album.art}}"><br>
            -->
            <a href="{% url 'music:album_details' songs.artiste songs.title %}">{{songs.title}}</a>
            <h5>{{songs.artiste}}</h5>
            <h5>{{songs.title}}</h5>
        {% empty %}
             No album was found
        {% endfor %}

这样你就可以和一个没有专辑的艺术家有一个页面了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40379248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档