下面是我的模特
class Movie(models.Model):
name = models.CharField(max_length=55)
artists = models.ManyToManyField(Artist)
def __str__(self):
return self.name
下面是视图:
def moviesView(request):
movies = Movie.objects.all()
context = {
"movies": movies
}
return render(request, 'movies/movies.html', context=context)
def movieView(request, name):
print(name)
movie = Movie.object.get(name=name)
context = {
"movie": movie
}
return render(request, 'movies/movie.html', context=context)
以下是URL:
urlpatterns = [
path('movies', moviesView, name='movies'),
re_path('movies/(\d+)', movieView, name='movie'),
path('artists', artistView, name='artists')
]
以下是模板:
<h1>Movies</h1>
{% for movie in movies %}
<a href="{% url 'movie' movie.name %}">{{ movie.name }}</a>
<h3>{{ movie.name }}</h3>
{% for artist in movie.artists.all %}
<ul>
<li><a href="{{ artist.wiki }}">{{ artist.name }}</a></li>
</ul>
{% endfor %}
{% endfor %}
如果我单击电影复仇者,则该电影应带到另一页,其中包含模型中提到的复仇者的电影详细信息: 我需要将网址的框架设置为:http://127.0.0.1:8000/movies/avengers
答案 0 :(得分:0)
您未指定参数。但是即使您这样做了,它也不会接受,因为\d+
仅接受一个数字序列,而不是字符串。
您可以使用:
urlpatterns = [
path('movies/', moviesView, name='movies'),
path('movies/(?P<name>.*)/', movieView, name='movie'),
path('artists/', artistView, name='artists')
]
,但是使用path
可能更容易:
urlpatterns = [
path('movies/', moviesView, name='movies'),
re_path('movies/<str:name>/', movieView, name='movie'),
path('artists/', artistView, name='artists')
]
使用名称也不是一个好主意。 percent encoded [wiki]中会包含许多字符,导致产生 ugly 网址。 Django使用slugs直观地生成令人愉悦的 URL。