Как передать ссылку на URL в Django? - PullRequest
1 голос
/ 17 октября 2019

На данный момент я просто хочу вызвать страницу на основе моего шаблона table.html. Я буду работать над добавлением всех моих данных таблицы позже. В настоящее время, когда я нажимаю на ссылку на таблицу на странице index.html, я получаю «TypeError ... table () получил неожиданный аргумент ключевого слова« d_100_id ».

Я попытался удалить ненужный кодиз таблицы и шаблона, и я проверил в браузере Chrome инкогнито на случай, если каждый раз получаю старую страницу.

Моя страница views.py

from django.shortcuts import get_object_or_404, render

from .models import D100Generator

def index(request):
    latest_table_list = D100Generator.objects.order_by('-d_100_id')[:5]
    context = {
        'latest_table_list': latest_table_list
    }
    return render(request, 'generators/index.html', context)

def table(request, table_slug):
    table = get_object_or_404(D100Generator, pk=table_slug)
    return render(request, 'generators/table.html', {'table': table})

Мой URL. py (если это помогает):


from . import views
app_name = "generators"

urlpatterns = [
    path('', views.index, name='index'),
    path('table/<slug:d_100_id>', views.table, name='table'),
]

index.html

<br>
<h2>Recent tables added include:</h2>
{% if latest_table_list %}
    <ul>
    {% for table in latest_table_list %}
        <li><a href="/generators/table/{{ table.table_slug }}">{{ table.table_name }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No tables are available.</p>
{% endif %}

и table.html <h1>{{ table.table_name }}</h1>

Я хотел, чтобы он вызывал хотя быtable.html и отобразите имя таблицы.

Вместо этого я получил сообщение об ошибке в верхней части страницы:

TypeError at /generators/table/your-elf-spent-25-years-learning

table() got an unexpected keyword argument 'd_100_id'

Request Method:     GET
Request URL:    http://localhost:8000/generators/table/your-elf-spent-25-years-learning
Django Version:     2.2.6
Exception Type:     TypeError
Exception Value:    

table() got an unexpected keyword argument 'd_100_id'

Exception Location:     C:\Users\tirli\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py in _get_response, line 113
Python Executable:  C:\Users\tirli\AppData\Local\Programs\Python\Python37\python.exe
Python Version:     3.7.4
Python Path:    

['C:\\Users\\tirli\\OneDrive\\Documents\\Schoolwork\\2020 Fall\\IT '
 '4750\\Capstone\\capstone',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\Scripts',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\DLLs',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\Doc',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\include',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\libs',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\Tools',
 'C:\\Users\\tirli\\OneDrive\\Documents\\Schoolwork\\2020 Fall\\IT '
 '4750\\Capstone\\capstone',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\lib',
 'C:\\Users\\tirli\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']

Server time:    Wed, 16 Oct 2019 17:29:47 -0600```

I can post the traceback as well if needed.

1 Ответ

1 голос
/ 17 октября 2019

Ваш путь должен выглядеть следующим образом: path('table/<slug:table_slug>', views.table, name='table'),

def table(request, table_slug):
    table = get_object_or_404(D100Generator, pk=table_slug)
    return render(request, 'generators/table.html', {'table': table})

Кроме того, в шаблоне вы можете использовать url шаблон тега, чтобы изменить URL-адрес, а не жестко его кодировать:

<li><a href="{% url 'generators:table' table_slug=table.pk %}">{{ table.table_name }}</a></li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...