У меня есть 2 функции:
Функция 1 проверяет URL-адрес для схемы:
def checkurl(self):
if request.method == 'POST' and 'url' in request.POST:
url = request.POST.get('url', '')
if not url.startswith('http://') and not url.startswith('https://'):
url = "https://" + url
return url
Функция 2 должна использовать переменную url. Но он говорит, что «имя 'url' не определено». Вот вторая функция:
def tests(request):
##################################################
# URL Parse: netloc, scheme
##################################################
x = datetime.datetime.now()
time = x.strftime("%Y-%m-%d-%H-%M-%S")
if request.method == 'POST' and 'url' in request.POST:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}#headers
# Set Width and Height
width_get = request.POST.get('width', '')
height_get = request.POST.get('height', '')
if width_get is not None and width_get != '':
width = width_get
else:
width = 1600
if height_get is not None and height_get != '':
height = height_get
else:
height = 1000
if url is not None and url != '':
url_parsed = urlparse(url)
scheme = url_parsed.scheme
netloc = url_parsed.netloc
if netloc.startswith('www.'):
netloc = netloc.replace('www.', '')
image_path = "media/" + netloc + "-" + time + ".png"
shot_path = "/media/" + netloc + "-" + time + ".png"
path = "C:/WebDrivers/chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get(url)
driver.set_window_size(width, height)
driver.save_screenshot(image_path)
screenshot = image_path
driver.quit()
var_dict = {
'screenshot': screenshot,
'shot_path':shot_path,
'netloc':netloc,
}
return render(request, 'apptests/shots.html', var_dict)
else:
return render(request, 'apptests/shots.html')
Как я могу использовать переменную URL из 1-й функции во второй функции?
1 ответ
Похоже, вы не вызываете checkurl
, поэтому, когда вы делаете if url is not None and url != '':
, переменная url
еще не определена.
Я думаю, вам просто нужно добавить url = checkurl()
перед этой строкой.
Однако вам нужно будет передать в эту функцию request
вместо self
, насколько я могу судить из опубликованного вами кода, checkurl
не кажется в классе, и вы используете представления на основе функций для представления tests
.
Итак, checkurl
будет:
def checkurl(request):
if request.method == 'POST' and 'url' in request.POST:
url = request.POST.get('url', '')
if not url.startswith('http://') and not url.startswith('https://'):
url = "https://" + url
return url
Обратите внимание, что я сделал отступ return url
. Это значит, что url
возвращается, только если он у нас есть. В вашей текущей функции checkurl
, если if request.method == 'POST' and 'url' in request.POST:
ложно, вы попытаетесь вернуть несуществующую переменную (она определена только в рамках этого оператора if). Итак, теперь функция просто вернет None
, если это условие не выполнено.
Затем вам просто нужно импортировать эту функцию в ваш файл views.py
(если он находится в отдельном файле) и вызвать ее над этим оператором if
:
url = checkurl(request)
if url is not None and url != '':
...
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.