基于存储在数据库对象中的名称,我已经开始在Django中动态创建URL了.所有这些页面都应由同一视图处理,但我希望数据库对象在调用时作为参数传递给视图.那可能吗?
这是我目前的代码:
places = models.Place.objects.all()
for place in places:
name = place.name.lower()
urlpatterns += patterns('',
url(r'^'+name +'/$', 'misc.views.home', name='places.'+name)
)
Run Code Online (Sandbox Code Playgroud)
是否可以将额外信息传递给视图,而无需向URL添加更多参数?由于URL是根目录,我仍然需要404页面显示其他值,我不能只使用字符串参数.解决方案是放弃尝试将URL添加到root,还是有其他解决方案?
我想我可以对名称本身进行查找,因为无论如何所有URL都必须是唯一的.这是唯一的其他选择吗?
Mar*_*ruz 22
我认为您可以使用其他属性将字典传递给视图,如下所示:
url(r'^'+name +'/$', 'misc.views.home', {'place' : place}, name='places.'+name)
Run Code Online (Sandbox Code Playgroud)
您可以更改视图以期望此参数.
Cid*_*ide 20
这通常是个坏主意,因为它会查询数据库中的每个请求,而不仅仅是与该模型相关的请求.更好的想法是提出一般的网址组合,并对所有这些组成使用相同的视图.然后,您可以检索视图中的相关位置,该位置仅在到达特定视图时才会到达数据库.
例如:
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
Run Code Online (Sandbox Code Playgroud)
我意识到这不是你真正要求的,但应该给你带来更少的麻烦.
| 归档时间: |
|
| 查看次数: |
17310 次 |
| 最近记录: |