Как использовать строку <li>в представлении django? - PullRequest
1 голос
/ 19 июня 2020

Я создаю блог, в котором пользователи могут нажимать на несколько <li> элементов на боковой панели, чтобы отображать сообщения блога в соответствии с выбранной категорией.

Желаемый результат несколько соответствует официальной документации , так что я получу /blog/category и соответствующие сообщения в блоге.

Проблема в том, что если я захожу на главную страницу (или http://127.0.0.1: 8000 / в разработке) возникает ошибка

render_blog() missing 1 required positional argument: 'category'

Итак, как я могу использовать вид render_blog как для главной страницы, так и для категорий, выбранных для отображения соответствующих сообщений в блоге?

html

<li class="navigation-item" id="spotlights-item">
    <div id="spotlights-ctn"><a href="/HotStocks">Hot Stocks</a><img id="fire-icon" src="{% static 'images/fire.svg' %}" alt="finsphere.io"></div>
</li>

URL

urlpatterns = [
    path('AsiaPacific/<category>', render_blog, name='AsiaPacific'),
    url(r'^$', render_blog, name='render_blog'),
]

views.py

def render_blog(request, category):
        category = category

        if not category:
            # Main blog as landing page
            # Get 5 latest posts and order by publish date, newest first
            posts = Post.objects.filter(publish_date__lte=now).order_by('-publish_date')[:5]
            return render(request, 'blog/blog.html', {'posts': posts})
        else:
            # Blog displayed as Category Selection
            posts = Post.objects.filter(categories__title=category, publish_date__lte=now)
            return render(request, 'blog/blog.html', {'posts': posts})

1 Ответ

0 голосов
/ 19 июня 2020

Я не уверен на 100%, что следую, но вам не нужно использовать href в теге привязки, чтобы ссылаться где-либо. Вы можете просто установить href = "" и присвоить каждой ссылке класс, например "ссылка-категория". Затем перенесите ie ваше ajax событие onclick в класс, и пусть код сначала извлечет текст или другой атрибут из ссылки и отправит его как переменную:

$('.category-link').on('click', function() {
  var link = $(this);
  var page = link.data('page');
  var category = link.data('category');
  $.ajax({
      type: 'post',
      url: '/lazy_load_posts/',
      data: {
         'page': page,
         'category': category,
         'csrfmiddlewaretoken': window.CSRF_TOKEN // from blog.html
      },
  (...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...