【问题标题】:Keep URL while surfing data Structure in Django web app在 Django Web 应用程序中浏览数据结构时保留 URL
【发布时间】:2014-01-06 16:07:29
【问题描述】:

我正在尝试创建一个基于 django 的网站。该站点的一部分的目标是根据其文件结构显示数据库的内容。

我希望在深入文件结构时保持 URL 不变,而不是为人们进入的文件结构的每个级别开发另一个视图。

我能想到的最简单的方法是在 request 变量中传递当前目录路径,但我不确定如何执行此操作,或者它是否是可能,因为它必须链接在 html 文件中,而不是用 python 编写的视图文件。

如果您至少能够为我指明正确的方向,我们将不胜感激!

【问题讨论】:

    标签: python django url filepath file-structure


    【解决方案1】:

    您的意思是要避免使用像www.example.com/db-contents/?level=2 这样的网址吗?像这样通过 request.GET 传递变量是正常的方法。所有的请求都会去同一个url和view,你可以在模板里做request.GET['level']

    如果您绝对希望 url 保持完全静态 (`www.example.com/db-contents/),那么您可以通过 AJAX 调用发送和接收您的数据。

    通过将?foo=bar 添加到url 意味着您可以访问request.GET 字典中的'foo' 键,该键的值将是"bar"。对于您使用 & 符号分隔的多个变量。

    例如:

    www.example.com/db-contents/?foo=bar&somevar=1&anothervar=
    
    >>> request.GET['foo']
    'bar'
    >>> request.GET['somevar']
    '1'
    >>> request.GET['anothervar']
    None
    >>> "anothervar" in request.GET
    True
    >>> "notsetvar" in request.GET
    False
    

    【讨论】:

    • www.example.com/db-contents/?level=2 的第一个示例没问题,除了级别 2 有多个选项,这意味着我不能只将级别 = 2 更改为级别 = 3 以向下一个级别。如果文件结构分为 7 个级别,那么从我所看到的情况来看,最直接的编码方式是拥有一个 www.example.com/db-contents/?levelname2/?levelname3/?levelname4/?levelname5/?levelname6/?levelname7 的 url 我希望有一种简单的方法可以避免这种情况,而无需使用任何类型的 JS
    • 请求变量本身不是 URL 的一部分(它们之间不需要斜杠)。它们是键/值对,很像 python 字典。你能举一个你想显示的数据库结构的例子吗?目前我不确定你所说的 levelname2、levelname3 等是什么意思
    • 您的“您不需要在它们之间使用斜线”可能会清除所有内容。我可以从 url 发送目录结构,但使用 www.example.com/db-contents/?leve1-level2-leve3 我可以将其转换为函数中的目录路径。不过,我必须决定使用什么字符进行路径分离。谢谢,我认为这导致了一个不同的问题。
    • Lifesaver=you 感谢您的更新。这比我想做的还要好!
    【解决方案2】:

    我建议查看 Django 文档站点上的表单。当用户提交表单时,适当的文件结构信息将传递给您的视图代码。然后,视图代码可以将新的文件结构信息传递给您的模板。模板将创建表单,该过程将重新开始。

    【讨论】:

    • Forms 是一种有趣的方式,但从我在文档中看到的情况来看,它主要需要用户文本输入,我希望点击即可。
    • 请记住,任何文本输入都可以对用户隐藏,但在单击表单的提交按钮时仍然可以传递。使用表单的好处是您可以使用 POST 而不是 GET,因此不必担心 URL 参数。但这真的归结为最适合您的特定情况/最简单的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多