使用页面slug打开django模板中的特定选项卡

时间:2015-11-12 17:48:39

标签: python django django-templates slug

我试图使用页面slugs在网页上打开特定的引导标签。例如:

www.mysite.domain/profile/#my_courses

将打开包含课程历史记录标签的个人资料页面

这是我的代码:

urls.py

urlpatterns = [
    url(r'^profile/$', views.profile,  name='profile'),
    url(r'^profile/(?P<page_slug>[\w-]+)/$', views.profile,  name='profile'),
]

view.py个人资料

@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,})

profile.html

{% 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>课程?

1 个答案:

答案 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看到,并告知视图在模板中呈现的内容。但是,您需要重新设计网址才能利用这一点。