জ্যাঙ্গো স্থির ফাইলের URL টি দেখুন


133

আমি পিডিএফ তৈরি করতে রিপোর্টল্যাব পিডিএফজেন ব্যবহার করছি। পিডিএফ এ একটি চিত্র দ্বারা নির্মিত drawImage। এর জন্য আমার হয় একটি চিত্রের URL বা ভিউতে একটি চিত্রের পথ প্রয়োজন। আমি ইউআরএল তৈরি করতে পরিচালিত করেছি তবে আমি কীভাবে চিত্রটির স্থানীয় পথ পাব?

আমি কীভাবে ইউআরএল পাই:

prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png"

উত্তর:


286

যেহেতু গুগলে এটি শীর্ষ ফলাফল, আমি ভেবেছিলাম এটি করার জন্য আমি আরও একটি উপায় যুক্ত করব। ব্যক্তিগতভাবে আমি এটিকে পছন্দ করি, কারণ এটি বাস্তবায়নটি জাঙ্গো কাঠামোর দিকে ছেড়ে দেয়।

# Original answer said:
# from django.templatetags.static import static
# Improved answer (thanks @Kenial, see below)
from django.contrib.staticfiles.templatetags.staticfiles import static

url = static('x.jpg')
# url now contains '/static/x.jpg', assuming a static path of '/static/'

2
স্থিতি url (STATIC_URL এ উপস্থিত না থাকলে) হোস্টনাম যুক্ত করার কোনও পরিষ্কার উপায় আছে কিনা আপনি কি জানেন? আমাকে মেলগুলিতে ছবি বা অন্যান্য সংস্থান যুক্ত করতে হবে, যেখানে ব্যবহারকারী আপেক্ষিক url সহ সংস্থানগুলি সন্ধান করতে সক্ষম হবে না।
জিপাটিনো

3
এটি ডিবাগে চলার সময় আমার পক্ষে কাজ করে না (DEBUG = মিথ্যা দিয়ে এখনও চেষ্টা করেনি)। আমি কেবল স্ট্যাটিক পদ্ধতিতে ফিরে আসা পথটি ফিরে আসি। জাজানো 1.6 ব্যবহার করে। কোন চিন্তা?
শন

আমি মনে করি django.contrib.staticfiles.templatetags.staticfiles ব্যবহার করে কোডটি জাঙ্গো-স্টোরেজগুলির সাথে সামঞ্জস্যপূর্ণ এবং এর অনুরূপ বিবেচনায় নেওয়া উচিত।
jdcaballerov

@gepatino আপনি রুট মাধ্যমে ফলাফলের request.build_absolute_uriযেমন এখানে বর্ণিত: stackoverflow.com/questions/2345708/...
dyve

17
জাজানো ২.০-তে, এটি হ্রাসের বিজ্ঞপ্তি প্রদর্শন করবে। from django.templatetags.static import staticপরিবর্তে ব্যবহার করুন।
ফ্লাইম

86

dyve এর উত্তর, ভালো তবে যদি তোমরা (যেমন আপনার জ্যাঙ্গো প্রকল্প এবং স্ট্যাটিক ফাইল চূড়ান্ত URL পাথ এ "ক্যাশে স্টোরেজ" "কুচি-কুচি করিয়া কাটা বস্তু" উচিত ব্যবহার করছেন style.aaddd9d8d8d7.css থেকে style.css ,) তারপর আপনি এর সাথে একটি সুনির্দিষ্ট url পেতে পারে না django.templatetags.static.static()। পরিবর্তে, django.contrib.staticfilesহ্যাশ url পেতে আপনাকে অবশ্যই টেমপ্লেট ট্যাগটি ব্যবহার করতে হবে ।

অতিরিক্তভাবে, ডেভলপমেন্ট সার্ভার ব্যবহারের ক্ষেত্রে, এই টেম্পলেট ট্যাগ পদ্ধতিটি নন-হ্যাশড ইউআরএল ফেরত দেয়, তাই আপনি হোস্টটি যে উন্নয়ন বা উত্পাদন নির্বিশেষে আপনি এই কোডটি ব্যবহার করতে পারেন! :)

from django.contrib.staticfiles.templatetags.staticfiles import static

# 'css/style.css' file should exist in static path. otherwise, error will occur 
url = static('css/style.css')

1
এর জন্য ধন্যবাদ ... আমি আমার এমডি 5 হ্যাশ কেন ইনজেকশন দিচ্ছি না তা বুঝতে আমাকে কিছুটা সময় নিয়েছিল
ilovett

4
এই উত্তরটি এখনও হিট হচ্ছে এবং সক্রিয়ভাবে ব্যবহৃত হয়েছে, তাই আমি @ কেনিয়ালে ক্রেডিট সহ আমার স্বীকৃত উত্তরটি উন্নত করেছি। এটি এখনও এই সমস্যার জন্য পছন্দসই সমাধান।
dyve

12

এখানে অন্য উপায়! (জাজানো ১. 1. এ পরীক্ষিত)

from django.contrib.staticfiles.storage import staticfiles_storage
staticfiles_storage.url(path)

DEBUG টি মিথ্যা হিসাবে সেট করা থাকলে এটি হ্যাশ করা URL টি ফেরত দেবে বলে ভাল সমাধান। staticfiles_storage.url(path, force=True)
মার্ক গিবনস

7

ডিফল্ট staticট্যাগ ব্যবহার করুন :

from django.templatetags.static import static
static('favicon.ico')

এর মধ্যে আরও একটি ট্যাগ রয়েছে django.contrib.staticfiles.templatetags.staticfiles(স্বীকৃত উত্তরের মতো) তবে এটি জ্যাঙ্গো ২.০+ এ অবমূল্যায়িত হয়েছে।


6

জ্যাঙ্গো 3.0 থেকে আপনার ব্যবহার করা উচিত from django.templatetags.static import static:

from django.templatetags.static import static

...

img_url = static('images/logo_80.png')

5

@ ডাইভের উত্তর আমার পক্ষে ডেভলপমেন্ট সার্ভারে কাজ করে না। পরিবর্তে আমি এটি দিয়ে সমাধান find। ফাংশনটি এখানে:

from django.conf import settings
from django.contrib.staticfiles.finders import find
from django.templatetags.static import static

def get_static(path):
    if settings.DEBUG:
        return find(path)
    else:
        return static(path)

1

যদি আপনি নিখুঁত url পেতে চান (প্রোটোকল, হোস্ট এবং পোর্ট সহ), আপনি request.build_absolute_uriনীচের মত দেখানো ফাংশনটি ব্যবহার করতে পারেন :

from django.contrib.staticfiles.storage import staticfiles_storage
self.request.build_absolute_uri(staticfiles_storage.url('my-static-image.png'))
# 'http://localhost:8000/static/my-static-image.png'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.