1

Was hoping someone could point me in the right direction with this. I've tried nearly everything I can think of, but I can't seem to get it to work. I've got a set of URLs I'd like to match in Django:

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

Basically, I want to make it so that when you just visit www.something.com/django/tabs/ it takes you to a splash page where you can browse through stuff. When you visit the second URL however, it takes you to a specific page which you can browse to from the first URL. This page is rendered based on an object in the database, which is why the id number is there. I've tried to account for this in the URL regex, but nothing I try seems to work. They all just take me to the main page.

This is what I have in urls.py within the main site folder:

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

and within urls.py in the app's folder:

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

Would anyone be so kind as to point me in the right direction? Thanks in advance!

2 Answers 2

4

You are not following the right approach here. Query paramers are used to change the behaviour of the page slightly. Like a added filter, search query etc.

What i would suggest is you have only one view and render different templates based on query parameters in the view.

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

In your alltab views you can have something like this.

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

Hope this helps

Sign up to request clarification or add additional context in comments.

1 Comment

That makes so much more sense. Thank you!
1

This is not the preferred 'django way' of defining urls patterns, I would say:-)

In the spirit of django would be something like

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

and for this you define your url patterns within the app for example this way 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'),
]

and something similar in your views

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

You can follow this django tutorial for more details:

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.