Django:从URL分发程序传递数据以查看而不将数据包含在URL中?

标签 django url

我已经决定要根据存储在数据库对象中的名称在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/

相关文章:

url - App Store 网站如何知道是否安装了 iTunes?

python - 将上传的 csv 文件转换为 Django 中的列表

python - 南方跳过 splinter 的迁徙

python - 覆盖 Django ImageField 验证

python - 使用 Django channel 时如何使用 Channel 而不是 Group?

php - 使用 .htaccess 创建 SEO 网址

.net - Internet Explorer 在查询字符串中遇到特殊字符问题

html - 表单值创建一个 URL

python - Django with mysql安装模块macos

javascript - 如何在 POST 方法中使用 dns.lookup() ?