Ошибка типа: получен неожиданный аргумент ключевого слова ‘entry’

#python #django #for-loop #url-routing

#python #django #для цикла #url-маршрутизация

Вопрос:

Я нахожусь в процессе создания проекта энциклопедии. На домашней странице есть список записей, и я хочу, чтобы все записи были связаны с их входной страницей.

В настоящее время, когда я нажимаю на ссылку на запись на домашней странице, в данном случае запись называется CSS, я получаю эту ошибку:

Ошибка типа в /wiki /CSS / entry() получен неожиданный аргумент ключевого слова ‘entry’ Метод запроса: ПОЛУЧИТЬ URL запроса:http://127.0.0.1:8000/wiki/CSS /

views.py

 def css(request):
    return render(request, "entries/css.html", {
        "css_entry": util.get_entry("css")
    })

def entry(request):
    return render(request, entry, "encyclopedia/index.html", {
        "entry": util.get_entry({"entry"})
})
  

urls.py

 urlpatterns = [
    path("", views.index, name="index"),
    path("css/", views.css, name="css"),
    path("<str:entry>/", views.entry, name="entry")
]
  

index.html

 <ul>
 {% for entry in entries %}
    <li><a href = "{% url 'entry' entry %}">{{ entry }}</a></li>
 {% endfor %}
</ul>
  

Самое неприятное, что если я войду в браузер:http://127.0.0.1:8000/wiki/CSS это работает, и страница загружается нормально, но не тогда, когда я нажимаю на ссылку с домашней страницы. Кроме того, если я удалю аргумент entry, оставив его как {% url ‘entry’ %}, домашняя страница перестанет работать, и я получу следующую ошибку:

Не найдено ни одного соответствия в / wiki / Reverse для ‘CSS’. ‘CSS’ не является допустимой функцией просмотра или именем шаблона. Метод запроса: ПОЛУЧИТЬ URL-адрес запроса:http://127.0.0.1:8000/wiki / Версия Django: 3.1.1 Тип исключения: NoReverseMatch

Ответ №1:

Как ваша entry функция принимает entry . Сделать:

 def entry(request, entry):
    return render(request, entry, "encyclopedia/index.html", {
        "entry": util.get_entry({"entry"})
    })
  

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

1. Я попробовал то, что вы сказали, но, к сожалению, теперь, когда я нажимаю на ссылку, я получаю сообщение об ошибке: TemplateDoesNotExist в /wiki /CSS/. Я предполагаю, что это означает, что есть какая-то проблема с тем, как расположены мои папки?

2. entries/css.html это должно быть app_name/your_html_file . Точно так же, как то, что вы сделали с функцией ввода. Пожалуйста, проверьте правильно, должна быть какая-то орфографическая ошибка или ошибка app_name или что-то в этом роде. И, остынь, братан, у тебя есть это 🙂