Получение неожиданной ссылки в шаблоне django

#python #django #django-templates

#python #django #django-шаблоны

Вопрос:

Я занимаюсь простым сайтом блога, где, если я нажал на имена авторов, отображается соответствующий пост! Если я использовал две разные функции просмотра, результат будет в порядке, но если я реализовал в одной функции, на странице публикации автора отображается URL, который не должен! Скриншот html-страницы:

введите описание изображения здесь

URL-ссылка содержит ссылку на страницу публикации автора! но, согласно коду, он должен отображать ссылку на публикацию!

 <a href="{{ post.url }}">Url Link</a>
  

Я вставляю весь свой код для лучшего понимания. Заранее спасибо!

Это мой urls.py:

 urlpatterns = [
    url('^$', views.url_list, name='url_list'),
    url(r'^(?P<year>d{4})/(?P<month>d{2})/(?P<day>d{2})/(?P<post>[-w] )/$',
        views.post_details, name = 'post_links'),
    # url(r'^author/(?P<author_slug>[-w] )/$', views.author_posts, name = 'url_list_by_author'),
    url(r'^author/(?P<author_slug>[-w] )/$', views.post_details, name = 'url_list_by_author'),
]
  

и мой view.py является:

 def post_details(request, year=None, month=None, day=None, post=None, author_slug=None):
    author_post_list = None
    if year:
        post = get_object_or_404(UrlPost, slug=post,
                                            status='published',
                                            publish__year=year,
                                            publish__month=month,
                                            publish__day=day,
        )
    if author_slug:
        author_post_list = UrlPost.author_manager.author_post(author_slug)
        post = None
    return render(request, 'detail.html', {'post': post, 'author_post_list': author_post_list})
  

и HTML-страница:

 {% extends "base.html" %}
{% block title %}{{post.title}}{% endblock  %}
{% block content %}
    <h1>{{ post.title|title }}</h1>
    <p>{{ post.publish }}</p>
    <ul>
        {% for author in post.author.all %}
            {% if forloop.first %}
                <li><h4>Author: amp;nbsp;</h4></li>
            {% endif %}
            <li><h4><a href="{% url "blog:url_list_by_author" author %}">{{ author|title }}</a></h4></li>
            {% if not forloop.last %}
                <li><h4>, amp;nbsp;</h4></li>
            {% endif %}
        {% endfor %}
    </ul>
    <p>{{ post.description }}</p>
    <a href="{{ post.url }}">Url Link</a>
    {% include "author_post.html" %}
{% endblock  %}
  

Комментарии:

1. Что в base.html ?

2. {% load staticfiles %} <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{% block title %}{% endblock %}</title> <link href="{% static "css/blog.css" %}" rel="stylesheet"> </head> <body> <div id="wrapper"> <div id="main_content"> {% block content %}{% endblock content %} </div> <div id="sidebar"> <h3>This is UrlCollection Site</h3> </div> </div> </body> </html>

3. Размещенный вами шаблон не соответствует отображаемому содержимому. Либо вы по ошибке разместили неправильный шаблон, либо это фактическая причина вашей проблемы.

4. Я почти уверен, что это может base.html ! если вы хотите увидеть author_post.html шаблон, это: {% block content %} {% for post in author_post_list %} <h2><a href="{{ post.get_absolute_url }}">{{ post.title|title }}</a></h2> <a href="{{ post.url }}">Url Link</a> <p>{{post.publish}}</p> {% endfor %} <h4>Hello</h4> {% endblock %}

Ответ №1:

Первая «URL-ссылка», которую вы видите вверху, происходит из этой строки в вашем html-шаблоне:

 <a href="{{ post.url }}">Url Link</a>
  

Все остальное, что отображается, исходит из author_post.html шаблона. Ссылка URL не является «дополнительной», на самом деле просто отсутствует все, что было раньше.

Вероятно, потому, что post переменная является None . Если вы действительно проверите сгенерированный html, это будет выглядеть так:

 <h1></h1>
<p></p>
<ul>
</ul>
<p></p>
<a href="">Url Link</a>
(and the here you will have the contents of author_post)
  

Хорошо, теперь о том, как это решить: вы не должны использовать одно и то же представление для отображения сообщения и сообщения автора сообщения. Вы должны создать два отдельных представления. У каждого свой шаблон. Затем, предполагая, что вы назвали новое представление author_posts в своем urls.py :

 urlpatterns = [
    url('^$', views.url_list, name='url_list'),
    url(r'^(?P<year>d{4})/(?P<month>d{2})/(?P<day>d{2})/(?P<post>[-w] )/$',
        views.post_details, name = 'post_links'),
    url(r'^author/(?P<author_slug>[-w] )/$', views.author_posts, name = 'url_list_by_author'),
]
  

Комментарии:

1. Я уже решил это, реализовав два представления, мне просто нужно знать причину! Спасибо, теперь я понимаю, почему отображается URL-ссылка . Но другое дело, что моя переменная post равна None, поэтому

2. Я уже решил это, реализовав два представления, мне просто нужно знать причину! Спасибо, теперь я понимаю, почему отображается ссылка URL. Но другое дело, что моя переменная post равна None, поэтому <a href="{{ post.url }}">Url Link</a> здесь это должно быть переведено в это: {{ None: url }} Тогда почему я получаю ссылку в этом виде: [ 127.0.0.1: 8000 / blog / author /mohib] ?