Я много искал в Google для ответов на вопрос о том, как использовать тег 'url' в шаблонах, чтобы найти много ответов, говорящих: «Вы просто вставляете его в свой шаблон и указываете на вид, который хотите url для '. Ну не радость для меня :(Я попробовал все перестановки можно и прибегли к публикации здесь в качестве последнего средстваИспользование {% url ??? %} в шаблонах django
Так вот мой urls.py выглядит следующим образом:..
from django.conf.urls.defaults import *
from login.views import *
from mainapp.views import *
import settings
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^weclaim/', include('weclaim.foo.urls')),
(r'^login/', login_view),
(r'^logout/', logout_view),
('^$', main_view),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
#(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/home/arthur/Software/django/weclaim/templates/static'}),
(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
)
Мои " views.py»в моем 'домашнем каталоге' выглядит следующим образом:
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext
from django.contrib import auth
def login_view(request):
if request.method == 'POST':
uname = request.POST.get('username', '')
psword = request.POST.get('password', '')
user = auth.authenticate(username=uname, password=psword)
# if the user logs in and is active
if user is not None and user.is_active:
auth.login(request, user)
return render_to_response('main/main.html', {}, context_instance=RequestContext(request))
#return redirect(main_view)
else:
return render_to_response('loginpage.html', {'box_width': '402', 'login_failed': '1',}, context_instance=RequestContext(request))
else:
return render_to_response('loginpage.html', {'box_width': '400',}, context_instance=RequestContext(request))
def logout_view(request):
auth.logout(request)
return render_to_response('loginpage.html', {'box_width': '402', 'logged_out': '1',}, context_instance=RequestContext(request))
и, наконец, main.html, к которому выглядит точки login_view как:
<html>
<body>
test! <a href="{% url logout_view %}">logout</a>
</body>
</html>
Так почему же я получаю «NoReverseMatch» каждый раз?
* (в несколько иной заметке мне пришлось использовать «context_instance = RequestContext (request)» в конце всего моего рендеринга-ответа, потому что иначе он не узнал бы {{MEDIA_URL}} в моих шаблонах, а я не может ссылаться на какие-либо файлы css или js. Я не уверен, почему это так. Не кажется мне правильным) *
Что вы говорите о 'context_instance = RequestContext (request)' правильно, это необходимо, чтобы позволить шаблону получить доступ к переменным контекста, предоставленным всем шаблонам. Это делается по умолчанию для всех общих представлений, но вам нужно сделать это самостоятельно в своих пользовательских. –
Кажется немного странным для меня, потому что вы собираетесь получать доступ к своим css и js-файлам все время из ваших шаблонов, чтобы поддерживать последовательность на вашем сайте. Следовательно, вы не должны иметь доступ к {{MEDIA_URL}} по умолчанию? – Sevenearths
Принимаемый ответ здесь больше не действителен –