我试图使用页面slugs在网页上打开特定的引导标签。例如:
www.mysite.domain/profile/#my_courses
将打开包含课程历史记录标签的个人资料页面
这是我的代码:
urlpatterns = [
url(r'^profile/$', views.profile, name='profile'),
url(r'^profile/(?P<page_slug>[\w-]+)/$', views.profile, name='profile'),
]
@login_required
def profile(request, page_slug=None):
profile = UserProfile.objects.get(user__username=request.user.username)
courses = Course.objects.filter(trainer__in = [profile]).order_by('start_time')
trainings = Course.objects.filter(students__in = [profile]).order_by('start_time')
return render(request, 'accounts/profile.html', context = {'courses': courses,
'trainings': trainings,
'page_slug': page_slug,})
{% extends 'base.html' %}
{% load staticfiles %}
{% load i18n %}
{% block headers %}
{{ block.super }}
<link rel='stylesheet' href='{% static "accounts/css/profile.css" %}'/>
{% endblock %}
{% block content %}
<ul class='nav nav-tabs navbar-inverse'>
<li class='active'><a href= '#profile' data-toggle='tab'>{% trans 'Profile' %}</a></li>
<li><a href='#trainings' data-toggle='tab'>{% trans 'My Trainings' %}</a></li>
{% if user.profile.is_trainer %}
<li><a href='#courses' data-toggle='tab'>{% trans 'My Courses' %}</a></li>
{% endif %}
</ul>
<div id='content' class='tab-content'>
<div class='tab-pane fade active in' id='profile'></div>
<div class='tab-pane fade' id='my_trainings'>
<ul class='courses__container'></ul>
</div>
{% if user.profile.is_trainer %}
<div class='tab-pane fade' id='courses'>
<ul class='courses__container'></ul>
</div>
{% endif %}
</div>
{% endblock %}
由于用户端的javascript无法理解django模板标签,因此我无法在javascript中执行此操作。如何在django模板中的active
和<li>
标记中添加/删除<div>
课程?
答案 0 :(得分:1)
在网址
中www.mysite.domain/profile/#my_courses
#my_courses
是片段,而不是slug。 URL片段仅存在于浏览器中,它们不会发送到Web服务器,因此您的URL路由和模板将永远不会看到它们。
当用户访问该网址时,发送给服务器的内容是
www.mysite.domain/profile/
这是返回的页面。您需要在页面上使用JavaScript来检查完整的URL(通过document.location.href)并相应地更新页面。
另一方面,slug不是由#
字符分隔,而是构成 发送到服务器的URL的一部分。这可以通过Django看到,并告知视图在模板中呈现的内容。但是,您需要重新设计网址才能利用这一点。