I have a Django project where I want to use an app for all the sites web pages. My project looks like this:
project
src
project
urls.py
views.py
...
web
migrations #package
urls.py
views.py
...
templates
web
index.html # I want this to be my root page
page2.html # This is the second page I'm trying to link to
I am trying to create a link in index.html
that will take me to page2.html
. This is what I am doing
In project->urls.py
I have url(r'^$', include('web.urls', namespace="web")),
. This should direct all page requests going to url http://127.0.0.1:8000/
to page index.html
project->views.py
is empty because I want all web pages served up by the web
app.
In web->urls.py
I have url(r'^$', views.index, name='home_page')
which relates to web->views.py
and the function
def index(request):
print("Main index Page")
return render(request, 'web/index.html', {})
Which returns the correct page.
This works fine until I add the link to index.html
for page2.html
. The link looks like this: {% url 'web:page2' %}
. I update web->urls.py
. I add the following function into web->views.py
:
def page2(request):
print("Page2")
return render(request, 'web/page2.html', {})
Now I get
Reverse for 'page2' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['$page2/?$']
With the '{% url 'web:page2' %}' line highlighted.
When I remove the link everything works fine. What is wrong with my logic/setup?
You need to add an additional URL pattern:
or alternatively, pass a parameter you can use to identify the page to be rendered to the view. Currently, you aren't mapping a URL to the function you want to call when the URL is matched for page2, just the home page.