带有变量的Django URL正则表达式

时间:2017-02-08 07:32:12

标签: regex django python-2.7 django-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")),
]

并在app的文件夹中的urls.py中:

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

有人会非常友好地指出我正确的方向吗?提前谢谢!

2 个答案:

答案 0 :(得分: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")

希望这有帮助

答案 1 :(得分:1)

这不是首选的django方式'定义网址模式,我会说: - )

django的精神就像是

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

为此,您可以通过这种方式在应用内定义您的网址模式 选项卡/ 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})
...

您可以按照此django tutorial了解更多详情: