#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] ?