簡體   English   中英

Django:為什么當前URL與urls.py中的任何模式都不匹配

[英]Django: Why Doesn't the Current URL Match any Patterns in urls.py

我在這里找到了一些與我的問題有關的問題,但是我沒有發現任何可以幫助我解決問題的問題。 我正在使用Python 2.7.5和Django 1.8.dev20140627143448。

我有一個與數據庫交互以刪除對象的視圖,它除了請求外還接受兩個參數:

def delete_data_item(request, dataclass_id, dataitem_id):
    form = AddDataItemForm(request.POST)
    data_set = get_object_or_404(DataClass, pk=dataclass_id)
    context = {'data_set': data_set, 'form': form}
    data_item = get_object_or_404(DataItem, pk=dataitem_id)
    data_item.delete()
    data_set.save()
    return HttpResponseRedirect(reverse('detail', 
        args=(dataclass_id,)))


myapp.urls.py的URL看起來像這樣:

url(r'^(?P<dataclass_id>[0-9]+)/(?P<dataitem_id>[0-9]+)/delete_data_item/$',
    views.delete_data_item, name='delete_data_item')


我的模板中與視圖相關的部分是:

<a href="{% url 'delete_data_item' data_set.id data_item.id %}">DELETE</a>


每當我單擊DELETE鏈接時,django都會告訴我請求URL:

http://127.0.0.1:8000/myapp/5/%7B%%20url%20'delete_data_item'%20data_set.id%20data_item.id%20%%7D

與我的任何網址格式都不匹配。 我想念什么? 存在DELETE鏈接的URL是myapp/(<dataclass_id>[0-9]+)/

編輯:

我應該包括的其他細節:

當我手動輸入正確的URL(即myapp/3/62/delete_data_item )時,刪除數據庫中的項目和調用reverse都可以正常工作。

完整的模板代碼:

`<h1>{{ data_set.name }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<ul>
    {% for data_item in data_set.dataitem_set.all %}
        <li>{{ data_item.log_date }}: {{ data_item }}
            <ul>
                <li>{{ data_item.id }}</li>
                <li><a href="{% url 'delete_data_item' data_set.id 
                    data_item.id %}">DELETE</a>
                </li>
            </ul>
        </li>

    {% endfor %}

    <form action="{% url 'add_data_item' data_set.id %}" method="post">
    {% csrf_token %}
        <li>{{ form.as_p }}</li>
        <input type="submit" value="Add data item"/>
    </form>
</ul>


來自瀏覽器的HTML代碼:

<h1>Hours Slept</h1>



<ul>

    <li>Aug. 18, 2014, 9:10 p.m.: 8 hours
        <ul>
            <li>8</li>
            <li><a href="{% url 'delete_data_item' data_set.id 
                data_item.id %}">
                DELETE</a>
            </li>
        </ul>
    </li>


    <li>Aug. 18, 2014, 9:11 p.m.: 1 hours
        <ul>
            <li>10</li>
            <li><a href="{% url 'delete_data_item' data_set.id 
                data_item.id %}">
                DELETE</a>
            </li>
        </ul>
    </li>


    <li>Aug. 21, 2014, 3:13 a.m.: 2.5 hours
        <ul>
            <li>60</li>
            <li><a href="{% url 'delete_data_item' data_set.id 
                data_item.id %}">
                DELETE</a>
            </li>
        </ul>
    </li>



<form action="/lets_quantify/5/add_data_item/" method="post">
<input type='hidden' name='csrfmiddlewaretoken' value='FoDLqsbDsuTGu1LBFv3lYZvD2UBa6oUz' />
    <li><p><label for="id_amount">Amount:</label> <input id="id_amount" name="amount" step="0.00001" type="number" /></p></li>
    <input type="submit" value="Add data item"/>
</form>
</ul>`

如果您發布的模板代碼是從實際文件中精確剪切並粘貼的,則在URL標記的中間有一個換行符,介於data_set.iddata_item.id之間。 Django使用了一個相當簡單的解析器,它無法識別分成多行的標簽,因此根本不會被解析為標簽。

刪除換行符,一切都應該很好。

您的模板無法正確呈現。 檢查您的模板代碼。 生成的鏈接包含%符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM