codyc4321
codyc4321

Reputation: 9672

Django reverse lookup rendering the same (wrong) template

I have a small resume site that is not rendering a different template upon hitting a reversed URL.

site/scripts/templates/scripts/index.html:

<p>were at main</p>

<a href="{% url 'scripts:python' %}">python</a>
<br/>
<a href="{% url 'scripts:bash' %}">bash</a>

These links 'python' and 'bash' work in the URL bar, they take us to localhost:scripts/bash/ and localhost:scripts/python/, but the exact same webpage is displayed (index.html, or localhost:scripts/)

site/scripts/urls.py:

from django.conf.urls import patterns, include, url
from scripts import views


urlpatterns = patterns('',
    url(r'$',            views.index,           name='index'),
    url(r'python/$',     views.access_python,   name='python'),
    url(r'bash/$',       views.access_bash,     name='bash'),
)

site/scripts/views.py:

from django.shortcuts import render

def index(request):
    return render(request, 'scripts/index.html')

def access_python(request):
    return render(request, 'scripts/python.html')

def access_bash(request):
    return render(request, 'scripts/bash.html')

site/urls.py (main folder w/ settings.py):

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'scripts/',    include('scripts.urls', namespace='scripts')),
)

clicking 'bash' should retrieve:

site/scripts/templates/scripts/bash.html:

<p>we're at bash</p>

Why would a reverse lookup reach the correct URL, but not call the associated view that that URL pattern wants? Thank you

Upvotes: 0

Views: 816

Answers (1)

codyc4321
codyc4321

Reputation: 9672

The index regex was catching any possible pattern, since it matched any end of string. I found out by moving the index pattern after the other 2. It should be:

urlpatterns = patterns('',

    url(r'^$',            views.index,           name='index'),
    url(r'^python/$',     views.access_python,   name='python'),
    url(r'^bash/$',       views.access_bash,     name='bash'),
)

Any blank index urls (r'^$') need both start and end of string, to match the empty string after the first part of that pattern (in this case, 'scripts/')

Upvotes: 3

Related Questions