Django URL 带变量的正则表达式

Django URL regex with variables

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

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)
]

谁能给我指明正确的方向?提前致谢!

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

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

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")

希望对您有所帮助

这不是定义 url 模式的首选 'django way',我会说:-)

在 django 的精神中会是这样的

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

为此,您可以通过这种方式在应用程序中定义 url 模式 tabs/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'),
]

以及您认为的类似内容

tabs/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})
...

您可以关注此 django tutorial 了解更多详情: