Django href = "{% url 'что-то'%}" не работает, в то время как href = "что-то" работает нормально - PullRequest
0 голосов
/ 20 января 2020

Я довольно новичок в Django, и в этом вопросе я почти уверен, что прочитал все сообщения Stackoverflow, касающиеся подобных проблем, но не могу найти ответ на мою проблему. Я сделал то же самое, что и учебник, которому я следую, и я прочитал документацию Django, и я не могу найти, что не так, и я собираюсь go сойти с ума. Поэтому, пожалуйста, вы можете помочь мне решить эту проблему.

Я использую Django 2.2 и Python 3.7.4

Вот так: я создаю простое CRUD-приложение и URL-адреса, которые я попытаться использовать (способ Django) не работает, и я не понимаю, почему. Поэтому я попытался использовать «обычные» URL, чтобы посмотреть, работает ли это, и это работает. Но я бы предпочел использовать URL-адреса типа Django, если я смогу заставить его работать.

В моем шаблоне у меня теперь есть два разных URL-адреса, для создания у меня есть обычный URL-адрес и для редактирования у меня есть URL-адрес Django. Последний возвращает следующую ошибку:

NoReverseMatch в / fabric_tree / Обратный для update_tissue не найден. update_tissue не является допустимой функцией представления или именем шаблона. Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / tiss_tree / Django Версия: 2.2.6 Тип исключения: NoReverseMatch Значение исключения: Обратное для update_tissue не найдено. update_tissue не является допустимой функцией представления или именем шаблона. Расположение исключения: C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ urls \ resolvers.py в _reverse_with_prefix, строка 673 Python Исполняемый файл: C : \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ python .exe Python Версия: 3.7.4 Python Путь: ['C: \ Users \ rbass \ Dropbox \ Prosjekt -MineTing-Notebooks \ UtviklingImplementering \ FungerendeDiCal \ DiCal \ dical ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ python37.zip ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ DLLs ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 ',' C: \ Users \ rbass \ AppData \ Roaming \ Python \ Python37 \ site-packages ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ win32 ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib \ сайт-пакет s \ win32 \ lib ',' C: \ Users \ rbass \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ Pythonwin ']

Мои взгляды

    from django.http import HttpResponse, Http404, HttpResponseRedirect
    from django.shortcuts import render, get_object_or_404, redirect
    from django.views import generic
    from django.template import loader
    from django.views.decorators.csrf import csrf_protect, csrf_exempt, ensure_csrf_cookie

    def tissue_tree(request):
    ''' creating the tissue-tree with possibility for creating, editing and deleting an object '''
       tissues = Tissue.objects.order_by('-name')
       template = loader.get_template('clinicalmodel/tissue_tree.html')
       context = {'tissues': tissues, }
       return HttpResponse(template.render(context, request))

    def update_tissue(request, pk):
       tissue = Tissue.objects.get(id=pk)
       tissueform = TissueForm(instance=tissue)
       context = {'tissueform': tissueform}
       return render(request, 'clinicalmodel/tissue_form.html', context)

Мой ulrs.py

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
    path('', include('clinicalmodel.urls')),
    path('admin/', admin.site.urls),
]

Мой Clinicalmodel.urls.py

from django.urls import path
from . import views

app_name = 'clinicalmodel'

urlpatterns = [
    path('create_tissue/', views.create_tissue, name='create_tissue'),
    path('tissue_tree/', views.tissue_tree, name='tissue_tree'),
    path('update_tissue/<str:pk>', views.update_tissue, name='update_tissue')
]

Мой шаблон

{% extends "base.html" %}

{% block content %}


<div class = "card card-body">
{% if tissues %}
{% for tissue in tissues %}
<ul>
<li>{{tissue.name}}<a class ="btn btn-primary btn-sm-block" href="../create_tissue">Add a new</a> 
<a class ="btn btn-primary btn-sm-block" href="{% url 'update_tissue' tissue.id %}">Edit</a>
</li>
</ul>
{% endfor %}
{% endif %}
</div> 
{% endblock  %}

Мои forms.py:

from django.forms import ModelForm
from .models import Tissue


class TissueForm(ModelForm):
    class Meta:
        model = Tissue
        fields = '__all__'

Моя ткань_форма. html

{% extends "base.html" %}

{% block content %}

<form action="" method="POST">
    {% csrf_token %}
    {{ tissueform }}
    <input type="submit" name="Submit">
</form>

{% endblock %}
...