【问题标题】:Django URL regex with variables带有变量的 Django URL 正则表达式
【发布时间】:2017-06-25 17:16:40
【问题描述】:

希望有人能以此为我指明正确的方向。我已经尝试了几乎所有我能想到的东西,但我似乎无法让它发挥作用。我有一组想在 Django 中匹配的 URL:

www.something.com/django/tabs/
www.something.com/django/tabs/?id=1

基本上,我想这样当您访问 www.something.com/django/tabs/ 时,它会将您带到一个启动页面,您可以在其中浏览内容。但是,当您访问第二个 URL 时,它会将您带到一个特定页面,您可以从第一个 URL 浏览到该页面。这个页面是基于数据库中的一个对象呈现的,这就是id号存在的原因。我试图在 URL 正则表达式中解释这一点,但我尝试的任何方法似乎都不起作用。他们都只是把我带到主页。

这是我在主站点文件夹中的 urls.py 中的内容:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^tabs/', include("tabs.urls")),
]

在应用文件夹中的 urls.py 中:

urlpatterns = [
    url(r'\?id=\d+$', tab),
    url(r'^$', alltabs)
]

有人能帮我指出正确的方向吗?提前致谢!

【问题讨论】:

    标签: regex django python-2.7 django-urls


    【解决方案1】:

    您在这里没有遵循正确的方法。查询参数用于稍微改变页面的行为。像添加的过滤器、搜索查询等。

    我的建议是您只有一个视图并根据视图中的查询参数呈现不同的模板。

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^tabs/', alltabs),
    ]
    

    在您的alltab 视图中,您可以拥有类似的内容。

    def alltabs(request):
        if request.GET.get("id"):
            id = request.GET.get("id")
            your_object = MyModel.objects.get(id=id)
    
            return render_to_response("tab.html", {"object":your_object})
        return render_to_response("alltab.html")
    

    希望对你有帮助

    【讨论】:

    • 这更有意义。谢谢!
    【解决方案2】:

    这不是定义 urls 模式的首选“django 方式”,我想说:-)

    在 django 的精神中会是这样的

    www.something.com/django/tabs/
    www.something.com/django/tabs/1/
    ....
    www.something.com/django/tabs/4/
    

    为此,您可以在应用程序中定义您的 url 模式,例如以这种方式 标签/urls.py:

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        # ex: /tabs/
        url(r'^$', views.index, name='index'),
        # ex: /tabs/5/
        url(r'^(?P<tab_id>[0-9]+)/$', views.detail, name='detail'),
        # ex: /tabs/5/results/
        url(r'^(?P<tab_id>[0-9]+)/results/$', views.results, name='results'),
    ]
    

    在你的观点中也有类似的东西

    标签/views.py:

    from django.shortcuts import get_object_or_404, render
    from tabs.models import Tab
    
    def index(request):
        return render(request, 'tabs/index.html')
    
    def detail(request, tab_id):
        tab = get_object_or_404(Tab, pk=tab_id)
        return render(request, 'tabs/detail.html', {'tab': tab})
    ...
    

    你可以关注这个djangotutorial了解更多详情:

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2013-07-26
      • 2014-07-08
      • 1970-01-01
      相关资源
      最近更新 更多