Django: work () отсутствует 1 обязательный позиционный аргумент: 'project_id' - PullRequest
0 голосов
/ 05 мая 2018

Когда я пытаюсь запустить страницу / work /, я получаю следующее сообщение об ошибке:

TypeError at /work/

work() missing 1 required positional argument: 'project_id'
Request Method: GET

Request URL:    http://72.132.209.86:8000/work/ (Not my real ip)

Django Version: 2.0.5

Exception Type: TypeError

Exception Value:    
work() missing 1 required positional argument: 'project_id'
Exception Location: /usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py in _get_response, line 126

Python Executable:  /usr/bin/python3

Python Version: 3.5.2

Мой код: views.py

def work(request):
    projectslist = Project.objects.order_by('project_name')[:5]
    context = { 'projectslist': projectslist, }
    return render(request, 'mywebsite/work.html', context)

def project(request):
    return render(request, 'mywebsite/project.html')

urls.py

path('work/', views.work, name='work'),
path('<int:project_id>/', views.project, name='project'),

models.py

class Project(models.Model):
    project_name = models.CharField(max_length=200)
    project_title = models.CharField(max_length=100)
    project_information = models.CharField(max_length=400)
    project_link = models.CharField(max_length=30)
    project_icon = models.CharField(max_length=40)
    project_category = models.CharField(max_length=50)

    def __str__(self):
        return self.project_name

work.html

{% extends 'mywebsite/base.html' %}
{% block content %}
    <ul>

    {% for project in projectslist %}
    <li><a href="{% url 'project' project.id %}">Testtest</a></li>
    {% endfor %}
    </ul>

{% endblock %}

Я знаю, что со ссылкой что-то не так, а именно, что она не распознает project.id, но я не знаю, каков источник этой проблемы. Я использую базу данных sqlite3, и у меня зарегистрировано два проекта (на pk = 3 и pk = 4)

1 Ответ

0 голосов
/ 05 мая 2018

Вы определили параметр project_id в своем URL, но представление, которое его обрабатывает, не принимает этот аргумент - вам необходимо добавить этот аргумент в сигнатуру функции:

def project(request, project_id):
    # You probably want to use project_id here to create 
    # the context for your view.
    return render(request, 'mywebsite/project.html')

При этом вы опубликовали исключение, которое говорит о том, что в представлении work() отсутствует этот аргумент, поэтому, пожалуйста, убедитесь, что код, который вы разместили выше, в точности соответствует вашему проекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...