【问题标题】:Why does Django add a dollar sign in my URL pattern? (NoReverseMatch)为什么 Django 在我的 URL 模式中添加美元符号? (无反向匹配)
【发布时间】:2021-12-19 21:10:35
【问题描述】:

我花了一整天的时间试图修复这个错误,但我不知道该怎么做。我正在尝试创建一个新的降价文件并在提交表单后将用户重定向到新页面。我尝试更改 URL 名称,尝试更改变量名称,但没有任何效果。问题可能是 Django 在我的 URL 模式中添加了一个美元符号,但我不确定,因为我试图为 URL 提供现有页面的值。我将不胜感激这个问题的详细解释。 我的意见.py:

def entry(request, entry):
    entryPage = util.get_entry(entry)
    if entryPage is None:
        message = messages.warning(request, 'There is not a page with this name.')
        return render(request, 'encyclopedia/error.html', {
            'entryTitle': entry,
            'message': message
        })
    else:
        return render(request, 'encyclopedia/entry.html',{
            'entry': markdowner.convert(entryPage),
            'title': entry
        })

def new(request):
    if request.method == 'POST':
        # Get the form
        form = Post(request.POST)
        if form.is_valid():
            # Clean the form
            title = form.cleaned_data['title']
            lower_title = form.cleaned_data['title'].lower()
            text = form.cleaned_data['textarea']
            entries = util.list_entries()
            # Check for existing entry
            for entry in entries:
                if lower_title == entry.lower():
                    message = messages.warning(request, "There is already a page with this name.")
                    context = {
                        'message': message,
                        "form": Search(),
                        "post": Post()
                    }
                    return render(request, 'encyclopedia/new.html',context)
            # Create and redirect to new entry
                else:
                    util.save_entry(title,text)
                    return HttpResponseRedirect(reverse("entry", args=[title]))
    else: 
        return render(request, 'encyclopedia/new.html', {
            "form": Search(),
            "post": Post()
        })

我收到的错误:

NoReverseMatch at /new
Reverse for 'entry' with arguments '('NewTitle',)' not found. 1 pattern(s) tried: ['entry$']

我的 urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/<str:entry>", views.entry, name="title"),
    path("new", views.new, name="new"),
    path("error", views.error, name="error"),
    path("entry", views.entry, name="entry")
]

此外,当我检查 Django Traceback 中的本地变量时,我看不到标题。这可能是因为迭代只执行了一次,直到发生错误。

【问题讨论】:

    标签: django django-forms django-urls


    【解决方案1】:

    您忘记将 entry 的参数添加到您的输入 URL 模式:

    urlpatterns = [
        # …,
        path('entry/<str:entry>/', views.entry, name='entry')
    ]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多