django问题{%url'..'%}

时间:2018-03-01 08:53:11

标签: django python-2.7

我不确切地知道如何解释这一点,但我会尝试......标签的链接会发生一些奇怪的事情...基本上当我链接一个< h1 时>标签或任何东西去另一个模板标签,它不起作用...它确实改变了网址扩展,但它保持在同一模板...

我现在会告诉你这些文件...... 这是文件夹项目的树:

tube/
├── main
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   ├── views.py
├── manage.py
├── models.py
├── templates
│   ├── base.html
│   └── main
│       ├── details.html
│       └── main.html
└── tube
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    ├── views.py
    ├── wsgi.py

main / views.py

class Main(TemplateView):
    template_name = 'main/main.html'

    def get_context_data(self, **kwargs):
        context = super(Main, self).get_context_data(**kwargs)
        test = Test.objects.all().order_by('ps_name')
        # for i in range(200):
        #     lines.append('Line %s' % (i + 1))
        paginator = Paginator(test, 20)
        page = self.request.GET.get('page')
        try:
            show_lines = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            show_lines = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            show_lines = paginator.page(paginator.num_pages)
        context['test'] = show_lines
        return context


def details(request, pk):
    ps = Test.objects.get(id=pk)
    print ps
    return render(request, 'main/details.html', {'test': ps})

正如您所看到的,我的第一个视图转到main.html,第二个视图转到details.html

main / urls.py

urlpatterns = [
    url(r'$', views.Main.as_view(), name='main'),
    url(r'(?P<pk>\d+)/', views.details, name='details'),
]

这是我的 templates / main / main.html

{% extends 'base.html' %}
{% load staticfiles %}
{% load static %}
{% load bootstrap4 %}
{% block content %}
    <div class="container">
        <table class="table table-bordered">
            <thead>
            <tr>
                <th>Name</th>
                <th>Rank</th>
            </tr>
            </thead>
            <tbody>
            {% for ps in test %}
                <tr>
                    <td>
                        <a href="{% url 'main:details'  pk=ps.id %}">{{ ps.ps_name }}</a>
                    </td>
                    <td>{{ ps.ps_rank }}</td>
                </tr>
            {% endfor %}
            </tbody>
        </table>

        {% bootstrap_pagination test url="/test?page=1" size="small" %}
    </div>
{% endblock %}

这只是 templates / main / details.html

的测试部分
<div class="container">
        <table class="table table-bordered">
            <thead>
            <tr>
                <th>Bio</th>
            </tr>
            </thead>
            <tbody>
            {% for ps in test %}
                <tr>
                    <td>{{ ps.bio }}</td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    </div>

所以我的问题是......当我点击 main / main.html 中的任何链接时,它没有显示 main / details.html 的内容向我显示了来自 main / main.html 的相同内容,但它确实更改了网址扩展。 有谁知道为什么?其他项目的原因我没有这样的问题...它工作正常。

谢谢

版本:

Django==1.11.10
django-bootstrap4==0.0.6

更新

更改网址扩展名: main / main.html 位于https://example.com/main .... main / details.html 位于https://example.com/main/(pk.id) ....基本上当我点击https://example.com/main上的名称时,它会转到https://example.com/main/101...but页面不会更改

2 个答案:

答案 0 :(得分:2)

您错过了主网址中的锚点;目前它只是意味着&#34;结束&#34;的任何字符串,当然它匹配所有内容。它应该是:

url(r'^$', ...

答案 1 :(得分:1)

您的urls应如下所示,您遗漏了^

urlpatterns = [
    url(r'^$', views.Main.as_view(), name='main'),
    url(r'^(?P<pk>\d+)/$', views.details, name='details'),
]