У меня есть проект django с приложением pub. Я пытаюсь настроить его так, чтобы я мог включить urls.py из каждого приложения (будет больше по мере того как я иду) в urls.py верхнего уровня. У меня также есть шаблон, который использует функцию 'url' для определения URL-адреса представления, определенного в модуле openidgae. Проблема в том, что после того, как httprequest направляется на pub.views.index (как это и должно быть), я пытаюсь ответить путем рендеринга шаблона, который использует функцию шаблона url. Код, который я показываю ниже, также находится здесь: http://gist.github.com/243158
Вот мой верхний уровень urls.py:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'', include('openidgae.urls')),
(r'^pub', include('pub.urls')),
)
и pub / urls.py:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'', 'pub.views.index'),
(r'^/$', 'pub.views.index'),
)
и templates / base.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="header">
{% if lip %}
Welcome {{ lip.pretty_openid }}
<a href="{% url openidgae.views.LogoutSubmit %}">logout</a>
{% else %}
<form id="login-form" action="{% url openidgae.views.OpenIDStartSubmit %}?continue={{continueUrl}}" method="post">
<input type="text" name="openid_identifier" id="openid_identifier" />
<input type="submit" value="Verify" />
</form>
<!-- BEGIN ID SELECTOR -->
<script type="text/javascript" id="__openidselector" src="https://www.idselector.com/selector/46b0e6d0c8ba5c8617f6f5b970865604c9f87da5" charset="utf-8"></script>
<!-- END ID SELECTOR -->
{% endif %}
</div>
{% block content %}{% endblock %}
</body>
</html>
и templates / pub / index.html:
{% extends "base.html" %}
{% block title %}blahblah!{% endblock %}
{% block content %}
blahblahblah
{% endblock %}
и, наконец, pub / views.py:
from django.shortcuts import render_to_response
from django.http import HttpResponse
from django import forms
import openidgae
def index(request):
lip = openidgae.get_current_person(request, HttpResponse())
resp = render_to_response('pub/index.html', {'lip': lip})
return resp
Теперь, если я установлю второй шаблон в моем urls.py верхнего уровня, чтобы он указывал прямо на 'pub.views.index', все будет работать так, как должно, но не в том случае, если я использую функцию включения.
Есть идеи? Я уверен, что проблема как-то связана с urlpattern, который сопоставляет представления, которые я пытаюсь разрешить, с URL-адресами, недоступными для функций рендеринга шаблонов, когда HttpRequest обрабатывается приложением pub, а не верхним уровнем. , но я не понимаю, почему или как это исправить.