如何生成从艺术家个人资料页面到 genre/trait 页面的链接
How to generate links from artist profile page to genre/trait pages
我正在尝试制作流派和特征的可点击链接,这些链接转发到包含与给定 trait/genre 相关的所有艺术家列表的页面。
这是我的艺术家个人资料页面模板
<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')
]
谢谢。
您只需稍微更改一下模板即可。
<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_detail
和 trait_detail
应该是 genre_profile
和 trait_profile
。或者,您也可以将网址的 name
参数分别更改为 genre_detail
和 trait_detail
。
我正在尝试制作流派和特征的可点击链接,这些链接转发到包含与给定 trait/genre 相关的所有艺术家列表的页面。
这是我的艺术家个人资料页面模板
<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')
]
谢谢。
您只需稍微更改一下模板即可。
<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_detail
和 trait_detail
应该是 genre_profile
和 trait_profile
。或者,您也可以将网址的 name
参数分别更改为 genre_detail
和 trait_detail
。