سؤال

أرغب في استخدام رقم مع نقطة عشرية في نمط URL Django لكنني لست متأكدا مما إذا كان ذلك ممكنا بالفعل (أنا لست خبيرا Regex).

إليك ما أريد استخدامه لعناوين URL:

/item/value/0.01
/item/value/0.05

هذه العناوين URL ستظهر العناصر التي تقدر بقيمة 0.01 دولار أو 0.05 دولار. بالتأكيد، يمكن أن أستأخذ طريقة سهلة للخروج وتمرير القيمة في سنتات لذلك سيكون / البند / القيمة / 1، ولكن أود الحصول على الوسيطة في رأيي كنوع بيانات عشري بدلا من عدد صحيح (و قد أضطر إلى التعامل مع كسور في المائة في مرحلة ما). هل من الممكن كتابة Regex في نمط عنوان URL Django الذي سيؤدي إلى التعامل مع هذا؟

هل كانت مفيدة؟

المحلول

يمكن أن يكون شيء مثل

urlpatterns = patterns('',
   (r'^item/value/(?P<value>\d+\.\d{2})/$', 'myapp.views.byvalue'),
   ... more urls
)

يجب أن لا يبدأ عنوان URL مع مائل.

في وجهات النظر، يمكنك الحصول على وظيفة:

def byvalue(request,value='0.99'):
    try:
        value = float(value)
    except:
        ...

نصائح أخرى

لا أعرف عن Django على وجه التحديد، ولكن هذا يجب أن يتطابق مع عنوان URL:

r"^/item/value/(\d+\.\d+)$"

إذا كانت القيم التي يجب قبولها هي 0.01 دولار أو 0.05 دولار فقط، فقد يتم تحديد نمط Harto مثل هذا:

r"^/item/value/(\d\.\d{2})$"

لا تستخدم »

url(r"^item/value/(?P<dollar>\d+\.\d{1,2})$", views.show_item, name="show-item"),

سوف تطابق فقط أنماط URL. مثل /item/value/0.01, /item/value/12.2 إلخ.

لن تتطابق أنماط URL. مثل /item/value/1.223, /item/value/1.2679 إلخ.

أفضل هو استخدام »

url(r"^item/value/(?P<dollar>\d+\.\d+)$", views.show_item, name="show-item"),

سوف تتطابق أنماط URL. مثل /item/value/0.01, /item/value/1.22, /item/value/10.223, /item/value/1.3 إلخ.

وأخيرا يمكنك تصميم الخاص بك views.py شيء مثل

هذا هو مجرد مثال.

# Make sure you have defined Item model (this is just an example)
# You use your own model name
from .models import Item 

def show_item(request, dollar):
    try:
        # Convert dollar(string) to dollar(float).
        # Which gets passed to show_item() if someone requests 
        # URL patterns like /item/value/0.01, /item/value/1.22 etc.
        dollar = float(dollar);

        # Fetch item from Database using its dollar value
        # You may use your own strategy (it's mine)
        item = Item.objects.get(dollar=dollar);

        # Make sure you have show_item.html.
        # Pass item to show_item.html (Django pawered page) so that it could be 
        # easily rendered using DTL (Django template language).
        return render(request, "show_item.html", {"item": item});
    except:
        # Make sure you have error.html page (In case if there's an error)
        return render(request, "error.html", {});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top