python - Django No Mini 与给定的查询匹配

标签 python django url http-status-code-404

我编写了一个链接缩短器应用程序,它采用常规长 URL,并创建一个 10 个字符的字母数字字符串,用于 Django-1.5.1 的重定向。
生成的字符串的重定向链接可以正常使用: url(r'^(?P<short>\w+)/$', 'target'),但由于某种原因,当我尝试访问其他两个 View (一个用于创建新的短网址,另一个用于查看所有链接)时,我收到一个 404 页面,显示“没有 Mini 与给定的查询匹配”。令人困惑的是,当我使用 url(r'^$', 'new_link'), 时一切正常或url(r'^$', 'home'),

这是我的 urls.py 的内容:

from django.conf.urls import patterns, url

urlpatterns = patterns('mini_url.views',
    url(r'^(?P<short>\w+)/$', 'target'),
    url(r'^new_link/$', 'new_link'),
    url(r'^home/$', 'home'),
)

和views.py:

from django.shortcuts import render, get_object_or_404, redirect
from mini_url.models import Mini
from mini_url.forms import MiniForm
import string, random

def generate(N):
    characters = string.letters + string.digits
    random_list = [random.choice(characters) for _ in xrange(N)]
    return ''.join(random_list)

def new_link(request):
    if request.method == 'POST':
        form = MiniForm(request.POST)

        if form.is_valid():
            create = True
            link = form.save(commit=False)
            short_url = generate(10)
            link.short_url = short_url
            link.save()
            link_string = "http://localhost:8000/m/%s/" % short_url

    else:
        form = MiniForm()

    return render(request, 'mini_url/new_link.html', locals())


def target(request, short):
    short_link = get_object_or_404(Mini, short_url = short)
    short_link.counter += 1
    short_link.save()
    return redirect(short_link.long_url)

def home(request):
    links = Mini.objects.order_by('counter')
    return render(request, 'mini_url/home.html', {'links':links})

我该如何解决这个问题?

最佳答案

问题出在您的 URL 模式上。改变一下顺序,就可以正常工作了。

将顺序更改为:

urlpatterns = patterns('mini_url.views',
    url(r'^new_link/$', 'new_link'),
    url(r'^home/$', 'home'),
    url(r'^(?P<short>\w+)/$', 'target'),
)

因为您的 url 模式匹配正则表达式是 \w+ ,当您执行/home时或/new_link

此处,URL 目标将匹配 url(r'^(?P<short>\w+)/$', 'target'),首先,并调用 View target参数为new_linkhome 。因此出现了这个问题。

关于python - Django No Mini 与给定的查询匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16987392/

相关文章:

Python Matplotlib 并排绘制两个数据集的箱线图

python - Python 中的另一个类可以调用一个函数返回的内容吗?

用于几何形状的 Python Canvas 库

javascript - 作为定时事件在django中执行代码

python - 如何链接到 django 上的用户个人资料

python - 如何将变量传递给 django 中的 {% url %} 标签?

python - 独立于 ModelChoiceField 的 __str__ 返回多个值

python - Django 1.6+ 测试未发现位于测试子目录中的单元测试

javascript - 如何在所有ajax调用中向URL添加参数?

php - 通过在 url 中传递值在同一页面中从 mysql 执行两个查询