我已经决定要根据存储在数据库对象中的名称在Django中动态创建URL。所有这些页面都应由同一 View 处理,但是我希望将数据库对象在调用时作为参数传递给该 View 。那可能吗?
这是我目前拥有的代码:
places = models.Place.objects.all()
for place in places:
name = place.name.lower()
urlpatterns += patterns('',
url(r'^'+name +'/$', 'misc.views.home', name='places.'+name)
)
是否可以在不向URL添加更多参数的情况下将额外的信息传递给 View ?由于这些URL用于根目录,并且我仍然需要404页才能显示其他值,因此我不能只使用字符串参数。是放弃尝试将URL添加到根目录的解决方案,还是有其他解决方案?
我想我可以对名称本身进行查找,因为所有URL都必须是唯一的。那是唯一的其他选择吗?
最佳答案
这通常是一个坏主意,因为它将查询数据库中的每个请求,而不仅是与该模型相关的请求。一个更好的主意是提出通用的url组成,并对所有URL都使用相同的 View 。然后,您可以检索 View 中的相关位置,只有在到达该特定 View 时,它才会命中数据库。
例如:
urlpatterns += patterns('',
url(r'^places/(?P<name>\w+)/$', 'misc.views.home', name='places.view_place')
)
# views.py
def home(request, name):
place = models.Place.objects.get(name__iexact=name)
# Do more stuff here
我意识到这不是您真正要求的,但应该可以减轻您的麻烦。
关于Django:从URL分发程序传递数据以查看而不将数据包含在URL中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708749/