【问题标题】:How to generate links from artist profile page to genre/trait pages如何生成从艺术家个人资料页面到流派/特征页面的链接
【发布时间】:2021-07-01 11:50:32
【问题描述】:

我正在尝试制作流派和特征的可点击链接,这些链接转发到包含与给定特征/流派相关的所有艺术家列表的页面。

这是我的艺术家个人资料页面模板

<h1>{{artist.stage_name}}</h1>
<h6>{{artist.real_name}}</h6>
<hr>
Genre:<a href="">{{artist.artist_genre}}</a>
<br>
Tratis:{{artist.artist_trait.all|join:", "}}

这是我目前的看法。我必须分别查询流派和特征吗?

def ArtistProfileView(request, pk):
    artist = Artist.objects.get(id=pk)
    context = {'artist':artist, }
    return render(request, 'artist/artist_profile.html', context)

这些是我的模型

class ArtistGenre(models.Model):
    genre_name = models.CharField('Genre', max_length=20)
    
    def __str__(self):
        return self.genre_name
    def get_absolute_url(self):
        return reverse('genre_detail', kwargs={'pk': self.pk})
  

class ArtistTrait(models.Model):
    trait_name = models.CharField('Trait', max_length=20)
    def __str__(self):
        return self.trait_name
    def get_absolute_url(self):
        return reverse('trait_detail', kwargs={'pk': self.pk})

class Artist(models.Model):
    stage_name = models.CharField('Stage Name', max_length=255)
    real_name = models.CharField('Birth Name', max_length=255, blank=True)
    artist_genre = models.ForeignKey(ArtistGenre, on_delete=models.CASCADE, related_name='artists')
    artist_trait = models.ManyToManyField(ArtistTrait, related_name='artists')
    date_added = models.DateField(auto_now_add=True, null=True)
    def __str__(self):
        return self.stage_name 
    def get_absolute_url(self):
        return reverse('profile_artist', kwargs={'pk': self.pk})

这些是我的网址

urlpatterns = [
    path('', views.ArtistIndex, name='index_artist'),
    path('artists/', views.ArtistListView.as_view(), name='artist_list'),
    path('profile/<int:pk>/', views.ArtistProfileView, name='profile_artist'),
    path('new/', views.ArtistCreateView.as_view(), name='new_artist'),
    path('edit/<int:pk>/', views.ArtistUpdateView.as_view(), name='edit_artist'),
    path('delete/<int:pk>/', views.ArtistDeleteView.as_view(), name='delete_artist'),
    path('genres/', views.GenreListView.as_view(), name='genre_list'),
    path('genre/<int:pk>/', views.GenreProfileView, name='genre_profile'),
    path('traits/', views.TraitListView.as_view(), name='trait_list'),
    path('trait/<int:pk>/', views.TraitProfileView, name='trait_profile')
]

谢谢。

【问题讨论】:

  • 您没有任何名为genre_detail 的网址格式,您的意思是genre_profile 吗? trait_detail 同样是trait_profile

标签: python django django-urls


【解决方案1】:

你只需要稍微改变一下模板。

<h1>{{artist.stage_name}}</h1>
<h6>{{artist.real_name}}</h6>
<hr>


    
Genre:<a href="{{artist.artist_genre.get_absolute_url}}">{{artist.artist_genre}}</a>
<br>
Tratis:
{% for trait in artist.artist_trait.all%}
<a href="{{trait.get_absolute_url}}">{{trait.trait_name}}</a>, 
{% endfor %}

此外,您的 get_absolute_url 方法对于 Genre 和 Trait 都存在问题。而不是genre_detailtrait_detail,它应该是genre_profiletrait_profile。或者,您也可以将网址的name参数分别更改为genre_detailtrait_detail

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 2023-03-27
    • 2015-11-04
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多