Tôi đã tìm kiếm rất nhiều trên google để tìm câu trả lời về cách sử dụng thẻ 'url' trong các mẫu chỉ để tìm thấy nhiều câu trả lời nói rằng 'Bạn chỉ cần chèn nó vào mẫu của mình và trỏ nó vào dạng xem bạn muốn url cho'. Chà, không có gì vui cho tôi :( Tôi đã thử mọi cách hoán vị có thể và đã dùng đến cách đăng ở đây như một phương sách cuối cùng.
Vì vậy, nó đây. Urls.py của tôi trông giống như sau:
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' của tôi trong thư mục 'đăng nhập' của tôi trông giống như sau:
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))
và cuối cùng là main.html mà các điểm login_view trông giống như sau:
<html>
<body>
test! <a href="{% url logout_view %}">logout</a>
</body>
</html>
Vậy tại sao tôi luôn nhận được 'NoReverseMatch'?
* (có một lưu ý hơi khác là tôi phải sử dụng 'context_instance = RequestContext (request)' ở cuối tất cả các kết xuất để trả lời của tôi bởi vì nếu không nó sẽ không nhận ra {{MEDIA_URL}} trong các mẫu của tôi và tôi không thể tham chiếu bất kỳ tệp css hoặc js nào. Tôi không chắc tại sao lại như vậy. Có vẻ không đúng với tôi) *
context_instance=RequestContext(request)
là chính xác, điều này là cần thiết để cho phép mẫu truy cập vào các biến ngữ cảnh được cung cấp cho tất cả các mẫu. Điều này được thực hiện theo mặc định cho tất cả các chế độ xem chung, nhưng bạn cần tự thực hiện trong các chế độ xem tùy chỉnh của mình.